Как совместить тип форматирования snprintf и scanf?
Как можно совместить snprintf(format,"%%%zus", count); с таким типом форматирования: fscanf(stdin, "%*[^\"]%*c%[^\"]", name) ? (считывать от кавычек до кавычек)
Ответы (1 шт):
Для чтения всего, что находится между кавычек, нужно вызвать scanf так:
char str[64];
scanf("%*[^\"]\"%[^\"]%*[^\n]", str);
Давайте разберём этот пример.
Часть %*[^\"] заставляет scanf пропустить всё до первого символа ". Но оставляет его в очереди. Дальше \" заставит функцию пропустить оставшийся символ ". Потом, с помощью %[^\"] функция читает всё, до следующего символа " и сохраняет это в str. Ну и наспоследок, %*[^\n] пропустит всё, что осталось. ВАЖНО! Оставит символ \n во входной очереди.
Например, при вводе строки I am a "test string" for this programm.
в str будет записоно test string.
Для указания необходимого количества символов для чтения будем использовать snprintf. Что бы создать необходимый формат, нужно вызвать её так:
char fmt[32];
snprintf(fmt, sizeof fmt, "%%*[^\"]\"%%%d[^\"]%%*[^\n]", count);
где count- это необходимое количество символов для чтения. После этого, в fmt будет находиться строка, которую можно передать scanf. Вызов будет таким:
scanf(fmt, str);