| Символы
преобразования и формат вывода по умолчанию 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 дает значение 'А'. |
| Спецификация преобразования |
| % [*] [ширина] /дополнительные j символL признаки J преобразования Символ * обозначает пропуск при вводе поля, определенного данной спецификацией; вводимое значение не присваивается никакой переменной. Ширина определяет максимальное число символов, вводимых по данной спецификации. |
| Пробел или символ табуляции в форматной строке описывает один или более пустых символов. Пустые символы (пробел, символ табуляции, символы новой строки, перевода формата, вертикальной табуляции) во входном потоке в общем случае рассматриваются как разделители полей. |
| Литеральные символы в форматной строке, за исключением символов пробела, табуляции и символа %, требуют, чтобы во входном потоке появились точно такие же символы. |
| Спецификация ввода символа |
| % [*] [ширина] сШирина определяет число символов, которые должны быть прочитаны из входного потока и присвоены массиву символов. Если ширина опущена, то вводится один символ. По данной спецификации можно вводить пустые символы. |
| Спецификация ввода строки |
| % [*] [ширина] sШирина описывает максимальную длину вводимой строки. Строки во входном потоке должны разделяться пустыми символами; ведущие пустые символы игнорируются. |
| Спецификация ввода целого числа |
| %[*] [ширина] ^] ^Буква 1 определяет тип вводимых данных как long, буква h - как short. По умолчанию принимается тип int. Символы преобразования d - десятичное целое со знаком; u — десятичное целое без знака; о — восьмеричное целое без знака; х - шестнадцатеричное целое без знака. |
| Спецификация ввода числа с плавающей точкой |
| %[*] [ширина][I] ^ е ^ Iе)Буква 1 определяет тип вводимых данных как double, по умолчанию принимается тип float. Символы преобразования f, e, g являются синонимами. |
| %
[*] [ширина] образецОбразец (сканируемое множество)
определяет множество символов, из которых может
состоять вводимая строка, и задается строкой
символов, заключенной в квадратные скобки.
Примеры
[abed]
[А321]
Непрерывный (в
коде ASCII) диапазон символов образца описывается
первым и последним символами диапазона.
Примеры [ а-z] [А - FO - 9] Если на первом месте в образце стоит символ ", то вводиться будут все символы из входного потока, кроме перечисленных в образце, т. е. допустимое по этой спецификации множество символов будет дополнительным к описанному.Пример [ О-9] По спецификации преобразования, заданной образцом, вводится строка символов, включая завершающий ее нулевой символ. Ведущие пустые символы не пропускаются. |