Функции форматного ввода
16. Функции форматного ввода: scanf, fscanf, sscanf.
Осуществляет ввод данных, является аналогом функции printf, позволяет проводить в обратном порядке многие из тех же самых преобразований. Функция
Scanf(control, arg1, arg2,…)
Читая символы из стандартного ввода, интерпретирует их в соответствии с форматом, указанным в аргументе control и помещает результаты в остальные аргументы. Управляющий аргумент описывается ниже, другие аргументы, каждый из которых должен быть указателем, определяют куда следует поместить соответствующим образом преобразованный ввод.
Управляющая строка обычно содержит спецификации преобразования, которые используются для интерпретации входных последовательностей. Управляющая строка может содержать:
-пробелы, табуляции или символы новой строки(символы пустых промежутков), которые игнорируются;
Вам также может быть полезна лекция "Библиографический список".
-обычные символы(не %), которые предполагаются совпадающими со следующими отличными от символов пустых промежутков символами входного потока;
-спецификации преобразования, состоящие из символа %, необязательного символа подавления присваивания *, необязательного числа, задающего максимальную ширину поля и символа преобразования.
Спецификация преобразования управляет преобразованием следующего поля ввода, результат помещается в переменную, которая указывается соответствующим аргументом. Если указан символ *, то это поле просто пропускается и никакого присваивания не производится. Поле ввода определяется как строка символов, которые отличны от символов простых промежутков; оно продолжается либо до следующего символа пустого промежутка, либо пока не будет исчерпана ширина поля. Значит при поиске нужного ей ввода¸ функция scanf будет пересекать границы строк(т.к. символ пустой строки входит в число пустых промежутков).
Про С++:
Синтаксис:
#include <stdio.h>
int scanf(char *format,...); /* ANSI */
int fscanf(FILE *fp, char *format,...); /* ANSI */
int sscanf(char *buffer, char *format,...); /* ANSI */
Это процедуры форматного ввода. Многоточия обозначают аргументы (от 0 и более), которые являются указателями на переменные для ввода информации. fscanf - читает из входного потока fp, scanf - читает из stdin, sscanf читает из указанного буфера buffer. Считываемые литеры преобразуются в соответствии с форматной строкой, и эти преобразованные значения размещаются по аргументам-указателям. Аргументы должны быть указателями на то, куда будут записываться значения.
Форматная строка состоит из:
1. Пробелов, литер табуляции и новой строки, которые вызывают пропуск ввода до следующей, не 'белой' (whitespace) литеры.
2. Других литер, кроме литеры %, которые "один в один" переправляются во ввод.
3. Спецификаций преобразования, которые выглядят следующим образом:
_ '%'['*'][ширина поля][точность]литера преобразования_
Эта строка определяет, каким образом вводимые символы должны преобразовываться и записываться по соответствующим аргументам-указателям. Преобразование продолжается до первой неподходящей входной литеры или исчерпания ширины поля.
Функции возвращают число присвоенных элементов ввода. Если встречается конец файла до того, как были выполнены какие-либо присваивания и возникли какие-либо конфликты (формата и ввода), возвращается значение EOF. Scanf() обычно завершает работу, когда достигает конца строки формата. fscanf возвращает количество успешно проведенных преобразований. Процесс заканчивается при встрече первой неподходящей литеры или признака конца файла (EOF). Ноль на выходе означает, что не обработано ни одного поля.