Форматированный ввод
f /—/ddd.ddd (число с фиксированной точкой) .
е / —7 d ddddde {±} dd (число в экспоненциальном формате).
Е /-7ddddddE{i}dd
g Наиболее короткий формат из f или е.
G Наиболее короткий формат из f или Е. Типы аргументов float и double не различаются. Числа с плавающей точкой печатаются в десятичном формате. Примеры
%f 1234.567890
%.lf 1234.6
%Е 1.234568Е+03
%.3е 1.235е+03
%g 1234.57
Замечание. Чтобы вывести символ %, необходимо в форматной строке задать два символа %%.
Пример
printf("%5.2f%%", 99.44);
В результате выполнения данной функции будет напечатано
99.44%
Для описания функций форматированного ввода scanf, fscanf, sscanf используются следующие метаобоэначения:
1t> Пробел (символ ^ на самом деле не печатается!) { \ Используется только один из перечисленных элементов. [] Используется только один или не используется ни одного
из перечисленных элементов. Замечание. Для использования функций, описанных в этом разделе, в программу необходимо включить команду препроцессора
#mclude <stdio.h>
Функции scanf, fscanf и sscanf могут иметь переменное число аргументов. Число и типы аргументов должны соответствовать спецификациям преобразования в форматной строке.
scanf - ввести данные из стандартного файла ввода stdin в соответствии с форматной строкой format, присваивая значения переменным, заданным указателями pointer. Определение: mt scanf (format [.pointer]...) char * format;
fscanf - ввести данные из потока stream в соответствии с форматной строкой format
Определение: mt fscanf (stream, format [.pointer]...) FILE •stream, char *format;
sscanf - читать данные из строки s в соответствии с форматной строкой format. Определение: int sscanf (s, format [.pointer]...)
char *s, *format,
Примеры
Входной поток содержит символы:
12.45 1048.73 АЕ405271 438 Вызов функции.
float x; char id [8+Г]; int n;
scanf("%f%*f%8[A-ZO-9]%d", &x,id, &n);
Переменной х присваивается значение 12.45, символы 1048.73 пропускаются, переменной id присваивается строка символов "АЕ405271", переменной n - целое значение 438.
Входной поток содержит символы:
25 54.32Е-01- monday Вызов функции:
int 1; float x, char name [50];
scanf ("%d%f%s", &i, &x, name);
Переменной i присваивается значение 25, переменной х - значение 5.432, переменной name - строка "monday"
Входной поток содержит:
56 789 0123 56АВС
Вызов функции:
int i, float x; char name [50];
scanf ("%2d%f%*d,% [0-9]", &i, &x, name);
Переменной i присваивается значение 56, переменной х — значение 789.0, символы 0123 пропускаются, строка "56" присваивается переменной name. Последующий ввод символа из этого потока функцией getchar дает значение 'А'.