<b>#include <stdio.h></b>
<b>int printf(const char *format, ...);</b>
<b>int sprintf(char *s, const char *format, ...);</b>
<b>int fprintf(FILE * stream, const char *format, ...);</b>
Функция
printf
выводит результат в стандартный вывод. Функция
fprintf
выводит результат в заданный файловый поток
stream
. Функция
sprintf
записывает результат и завершающий нулевой символ в строку
s
, передаваемую как параметр. Эта строка должна быть достаточно длинной, чтобы вместить весь вывод функции.
У семейства
printf
есть и другие члены, обрабатывающие свои аргументы различными способами. См. подробную информацию на страницах интерактивного руководства.
Обычные символы передаются в вывод без изменений. Спецификаторы преобразований заставляют функцию
printf
выбирать и форматировать дополнительные аргументы, передаваемые как параметры. Спецификаторы всегда начинаются с символа
%
. Далее приведен простой пример:
printf("Some numbers: %d, %d, and &d\n", 1, 2, 3);
Он порождает в стандартном выводе следующую строку.
Some numbers: 1, 2, and 3
Для вывода символа
%
следует применять последовательность
%%
, чтобы не путать его со спецификатором преобразования.
Далее перечислены наиболее часто применяемые спецификаторы преобразований:
□
%d
,
%i
— выводить целое как десятичное число;
□
%о
,
%x
— выводить целое как восьмеричное, шестнадцатеричное число;
□
%с
— выводить символ;
□
%s
— выводить строку;
□
%f
— выводить число с плавающей точкой (одинарной точности);
□
%e
— выводить число с двойной точностью в формате фиксированной длины;
□
%g
— выводить число двойной точности в общем формате.
Очень важно, чтобы число и тип аргументов, передаваемых функции
printf
, соответствовали спецификаторам преобразования в строке
format
. Необязательный спецификатор размера применяется для обозначения типа целочисленных аргументов.
Он может быть равен
h
, например,
%hd
для обозначения типа
short int
(короткие целые), или
l
, например,
%ld
для обозначения типа
long int
(длинные целые). Некоторые компиляторы могут проверять эти установки
printf
, но они ненадежны. Если вы применяете компилятор GNU gcc, можно вставить для этого в команду компиляции опцию
-Wformat
.
Далее приведен еще один пример:
char initial = 'А';
char *surname = "Matthew";
double age = 13.5;
printf("Hello Mr %c %s, aged %g\n", initial, surname, age);
Будет выводиться следующая информация:
Hello Mr A Matthew, aged 13.5
Вы можете добиться большего при выводе элементов с помощью спецификаторов полей. Они расширяют возможности спецификаторов преобразований, управляя расположением элементов при выводе. Обычно задается количество десятичных разрядов для числа с плавающей точкой или величина пробельных отступов, обрамляющих строку.
Спецификаторы полей задаются в виде чисел, следующих в спецификаторах преобразований непосредственно за знаком
%
. В табл. 3.5 приведены дополнительные примеры использования спецификаторов преобразований и результирующий вывод. Для большей ясности мы применяем знак вертикальной черты, чтобы показать границы вывода.
Таблица 3.5
Формат | Аргумент | Вывод |
%10s
| "Hello"
| | Hello|
|
%-10s
| "Hello"
| |Hello |
|
%10d
| 1234
| | 1234|
|
%-10d
| 1234
| |1234 |
|
%010d
| 1234
| |0000001234|
|
%10.4f
| 12.34
| | 12.3400|
|
%*s
| 10, "Hello"
| | Hello|
|
Все приведенные примеры выводятся в поле шириной 10 символов. Обратите внимание на то, что отрицательная ширина поля означает выравнивание элемента по левому краю в пределах поля. Переменная ширина поля обозначается символом "звездочка" (
*
). В этом случае следующий аргумент применяется для задания ширины. Ведущий ноль указывает на вывод элемента с ведущими нулями. В соответствии со стандартом POSIX функция
printf
не обрезает поля; наоборот она расширяет поле, чтобы вместить в него аргумент. Например, если вы попытаетесь вывести строку большей длины, чем заданное поле, ширина поля будет увеличена (табл. 3.6).
Таблица 3.6
Формат | Аргумент | Вывод |
%10s
| "HelloTherePeeps"
| |HelloTherePeeps|
|