fscanf читает данные из потока
Форматная строка обычно содержит спецификации преобразования, которые используются для управления вводом. В форматную строку могут входить:
• пробелы и табуляции, которые игнорируются;
• обычные символы (кроме %), которые ожидаются в потоке ввода среди символов, отличных от символов-разделителей;
• спецификации преобразования, состоящие из %; необязательного знака *, подавляющего присваивание; необязательного числа, специфицирующего максимальную ширину поля; необязательных h, l или L, указывающих размер присваиваемого значения, и символа-спецификатора преобразования.
Спецификация преобразования определяет преобразование следующего поля ввода. Обычно результат размещается в переменной, на которую указывает соответствующий аргумент. Однако если присваивание подавляется с помощью знака *, как, например, в %*s, то поле ввода просто пропускается, и никакого присваивания не происходят. Поле ввода определяется как строка символов, отличных от символов-разделителей; при этом ввод строки прекращается при выполнении любого из двух условий: если встретился символ-разделитель или если ширина поля (в случае, когда она указана) исчерпана. Из этого следует, что при переходе к следующему полю
Символ-спецификатор указывает на способ интерпретации поля ввода. Соответствующий аргумент должен быть указателем. Список допустимых символов-спецификаторов приводится в таблице B-2.
Символам-спецификаторам d, i, n, o, u и x может предшествовать h, если аргумент есть указатель на
int scanf (const char *format, ...);
scanf(...) делает то же, что и
int sscanf (const char *s, const char *format, ...);
sscanf(s, ...) делает то же, что и
Таблица B-2. Преобразования