Книга: Язык программирования Си. Издание 3-е, исправленное
B1.2. Форматный вывод
B1.2. Форматный вывод
Функции printf осуществляют вывод информации по формату.
int fprintf(FILE *stream, const char *format, ...);
fprintf преобразует и пишет вывод в поток stream под управлением format. Возвращаемое значение - число записанных символов или, в случае ошибки, отрицательное значение.
Форматная строка содержит два вида объектов: обычные символы, копируемые в выводной поток, и спецификации преобразования, которые вызывают преобразование и печать остальных аргументов в том порядке, как они перечислены. Каждая спецификация преобразования начинается с % и заканчивается символом-спецификатором преобразования. Между % и символом- спецификатором в порядке, в котором они здесь перечислены, могут быть расположены следующие элементы информации:
• Флаги (в любом порядке), модифицирующие спецификацию:
- | указывает на то, что преобразованный аргумент должен быть прижат к левому краю поля; |
+ | предписывает печатать число всегда со знаком; |
пробел | если первый символ - не знак, то числу должен предшествовать пробел; |
0 | указывает, что числа должны дополняться слева нулями до всей ширины поля; |
# | указывает на одну из следующих форм вывода: для o первой цифрой должен быть 0; для x или X ненулевому результату должны предшествовать 0x или 0X; для e, E, f, g и G вывод должен обязательно содержать десятичную точку; для g и G завершающие нули не отбрасываются. |
• Число, специфицирующее минимальную ширину поля. Преобразованный аргумент будет напечатан в поле, размер которого не меньше указанной ширины, а если потребуется, в поле большего размера. Если число символов преобразованного аргумента меньше ширины поля, то поле будет дополнено слева (или справа, если число прижимается к левому краю). Обычно поле дополняется пробелами (или нулями, если присутствует флаг дополнения нулями).
• Точка, отделяющая указатель ширины поля от указателя точности.
• Число, задающее точность, которое специфицирует максимальное количество символов, печатаемых из строки, или количество цифр после десятичной точки в преобразованиях e, E или f, или количество значащих цифр для g или G - преобразования, или минимальное количество цифр при печати целого (до необходимой ширины поля число дополняется слева нулями).
• Модификаторы h, l (буква ell) или L. "h" указывает на то, что соответствующий аргумент должен печататься как short или unsigned short; "l" сообщает, что аргумент имеет тип long или unsigned long; "L" информирует, что аргумент принадлежит типу long double.
Ширина, или точность, или обе эти характеристики могут быть специфицированы с помощью *; в этом случае необходимое число "извлекается" из следующего аргумента, который должен иметь тип int (в случае двух звездочек используются два аргумента).
Символы-спецификаторы и разъяснение их смысла приведены в таблице B-1. Если за % нет правильного символа-спецификатора, результат не определен.
int printf(const char *format, ...);
printf(...) полностью эквивалентна fprintf(stdout, ...).
int sprintf(char *s, const char *format, ...)
sprintf действует так же, как и printf, только вывод осуществляет в строку s, завершая ее символом ''. Строка s должна быть достаточно большой, чтобы вмещать результат вывода. Возвращает количество записанных символов, в число которых символ '' не входит.
int vprintf (const char *format, va_list arg)
int vfprintf (FILE *stream, const char *format, va_list arg)
int vsprintf (char *s, const char *format, va_list arg)
Функции vprintf, vfprintf и vsprintf эквивалентны соответствующим printf- функциям с той лишь разницей, что переменный список аргументов представлен параметром arg, инициализированным макросом va_start и, возможно, вызовами va_arg (см. в B7 описание <stdarg.h>).
Таблица B-1. Преобразования printf
Символ | Тип аргумента; вид печати |
---|---|
d, i | int; знаковая десятичная запись |
o | unsigned int; беззнаковая восьмеричная запись (без 0 слева) |
x, X | unsigned int; беззнаковая шестнадцатеричная запись (без 0x или 0X слева), в качестве цифр от 10 до 15 используются abcdef для x и ABCDEF для X |
u | unsigned int; беззнаковое десятичное целое |
c | int; единичный символ после преобразования в unsigned char |
s | char *; символы строки печатаются, пока не встретится '' или не исчерпается количество символов, указанное точностью |
f | double; десятичная запись вида [-]mmm.ddd, где количество d специфицируется точностью. По умолчанию точность равна 6; нулевая точность подавляет печать десятичной точки |
e, E | double; десятичная запись вида [-]m.dddddde±xx или запись вида [-]m.ddddddE±xx, где количество d специфицируется точностью. По умолчанию точность равна 6; нулевая точность подавляет печать десятичной точки |
g, G | double; используется %e и %E, если порядок меньше -4 или больше или равен точности; в противном случае используется %f. Завершающие нули и точка в конце не печатаются |
p | void *; печатает в виде указателя (представление зависит от реализации |
n | int *; число символов, напечатанных к данному моменту данным вызовом printf, записывается в аргумент. Никакие другие аргументы не преобразуются |
% | никакие аргументы не преобразуются; печатается % |
- B1.7. Функции обработки ошибок
- Глава 7. Ввод и вывод
- 7.4 Форматный ввод (scanf)
- B1.6. Функции позиционирования файла
- 7.2 Форматный вывод (printf)
- B1. Ввод-вывод: ‹stdio.h›
- B1.3. Форматный ввод
- B1.4. Функции ввода-вывода символов
- B1.5. Функции прямого ввода-вывода
- Процедуры ввода и вывода
- Включение и отключение синхронного вывода
- 2. Правила вывода Армстронга