Информатика и технология программирования

         

Функции форматированного ввода-вывода



.
------------------------------- Форматированный вывод --¬
¦ int printf(char *format,...) ¦
¦ - стандартный вывод ¦
¦ int fprintf(FILE *fd, char *format,...) ¦
¦ - явно указанный файл ¦
¦ int sprintf(char *str, char *format,...) ¦
¦ ¦ - строка в памяти ¦
¦ L--- число выведенных байтов или EOF ¦
L--------------------------------------------------------
------------------------------- Форматированный ввод ---¬
¦ int scanf(char *format,...) ¦
¦ - стандартный ввод ¦
¦ int fscanf(FILE *fd, char *format,...) ¦
¦ - явно указанный файл ¦
¦ int sscanf(char *str, char *format,...) ¦
¦ ¦ - строка в памяти ¦
¦ L--- число фактических параметров, для которых ¦
¦ введены значения, или EOF ¦
L--------------------------------------------------------

Форматная строка определяет количество и типы фактических параметров из переменного списка. Последовательность символов, идущая за "%" (спецификация формата), определяет тип и формат ввода-вывода очередного фактического параметра. При этом в функциях форматированного вывода все символы форматной строки выводятся в выходной файл за исключением спецификаций формата, которые заменяются значениями соответствующих фактических параметров. В функциях форматированного вывода тип параметра должен совпадать с заданным в спецификации, в функциях форматного ввода - быть указателем на этот тип (то есть должен передаваться адрес переменной, а не ее значение).


.
-- форматная строка ---¬ -------¬ фактические
printf("....%***...%***...%***",p1,p2,p3); параметры
¦ ¦ L-&#62&#62-¦--¦--- переменного
¦ L---&#62&#62------¦--- списка
L-----&#62&#62------------

Спецификация формата ввода-вывода фактического параметра ([] обозначают необязательную часть) .


.
% [флаги][ширина][.точность][модификатор] тип ------------¬
¦ ¦ ¦ +- "F" far-указатель ¦
¦ ¦ ¦ +- "N" near-указатель ¦
¦ ¦ ¦ +- "h" параметр типа short ¦
¦ ¦ ¦ L- "l" параметр типа long ¦
¦ ¦ ¦ или double (для scanf)¦
¦ ¦ +- "0" без дробной части ¦


¦ ¦ +- n не более n знаков после точки ¦
¦ ¦ L- * задается следующим фактическим ¦
¦ ¦ параметром функции ¦
¦ +- n минимальная ширина поля n (незаполненные ¦
¦ ¦ позиции - пробелы) ¦
¦ +- 0n то же, незаполненные позиции - нули ¦
¦ L- "*" задается следующим фактическим ¦
¦ параметром функции ¦
+- "-" выравнивание по левому краю поля ¦
¦ (по умолчанию - по правому) ¦
+- "+" выводится знак числа ("+" или "-") ¦
+- " " выводится пробел перед положительным числом ¦
L- "&#35" выводится идентификатор системы счисления ¦
("0" -восьмеричная, "0x" -шестнадцатеричная, ¦
"." -для float) char "c" --------+
десятичное int "d" --------+
то же "i" --------+
десятичное unsigned "u" --------+
восьмеричное unsigned "o" --------+
шестнадцатеричное unsigned "x" --------+
со строчными и прописными А..F "X" --------+
float в формате ***.*** "f" --------+
float в формате *.***e*** "e" --------+
float в формате *.***E*** "E" --------+
в зависимости float ("e" или "f") "g" --------+
от точности float ("E" или "F") "G" --------+
char * "s" ---------
(ввод по точности или до \n, вывод по
точности, до \n или до \0)


Содержание раздела