int printf(формат[,аргументы]...)
Функция printf() возвращает количество выведенных символов или, в случае ошибки, отрицательное число.
Формат — это строка, заключенная в двойные кавычки, которая может содержать литеральные символы, копируемые в поток вывода, и спецификации преобразования.
#include <stdio.h>
Спецификаторы преобразования должны соответствовать типу указанных
аргументов. При несовпадении не будет выдано сообщений об ошибках ни при
компиляции, ни при выполнении программы, но при этом вывод программы может содержать "мусор".
Таблица 1
Символ-спецификатор | Тип аргумента; вид печати |
c | int; единичный символ после преобразования в unsigned char |
d, i | int; знаковое целое число в десятичной записи |
o | int; знаковое целое число в восьмеричной записи |
x, X | int; знаковое целое число в шестнадцатеричной (a-f или A-F) записи |
u | int; беззнаковое целое число в десятичной записи |
e, E | double; десятичная форма записи вида [-]m.dddddde xx или [-]m.ddddddE xx, где количество d определяется точностью. По умолчанию точность равна 6, нулевая точность подавляет печать десятичной точки |
f | double; десятичная форма записи вида [-]mmm.ddd, где количество d определяется точностью. По умолчанию точность равна 6, нулевая точность подавляет печать десятичной точки |
g, G | double; используется %e или %E, если порядок меньше -4 или больше или равен точности, в противном случае используется %f. Завершающие нули и десятичная точка не печатаются |
s | char; печатает символы, расположенные до признака конца строки, или в количестве, заданном точностью |
p | void *;указатель |
n | int *; число символов, напечатанных к данному моменту данным вызовом функции, записывается в аргумент (никакие другие аргументы не преобразуются) |
% | Аргумент не преобразуется; печатается символ % |
Пример 1
#include <stdio.h>
int main()
{
char c = 'j';
int val = 59;
float total = 7500.5;
long double var = 63.78;
char initials[4];
initials[0] = 'I';
initials[1] = 'M';
initials[2] = 'R';
initials[3] = '\0';
printf("%c\n", c);
printf("%d\n", val);
printf("%o\n", val);
printf("%x\n", val);
printf("%e\n", total);
printf("%e\n", total);
printf("%Lf\n", var);
printf("%s\n", initials);
}
вывод:
j
59
73
3b
7.500500e+03
7500.500000
63.780000
IMR
Дополнительное форматирование
Функция printf() предоставляет множество возможностей по форматированию вывода.
В спецификации преобразования между символом % и символом-спецификатором могут быть расположены следующие элементы (в указанном порядке):
- Флаги (в любом порядке), модифицирующие спецификацию:
- Символ минус (-): выравнивание по левому краю. Задание ширины поля по умолчанию устанавливает выравнивание по правому краю. Для выравнивания по левому краю надо указать символ минус (-) перед шириной поля, например, %-15d, %-15s.
- Символ плюс (+): печать числа со знаком. По умолчанию перед отрицательными числами выводится минус (-). Для того, чтобы перед положительными числами выводился плюс (+), надо использовать %+d, %+f и т.д.
- Символ пробел: если число положительное или нуль, то при печати числу будет предшествовать пробел.
- Символ нуль (0): указывает, что числа должны дополняться слева нулями до всей ширины поля.
- Символ #. Для печати ведущих нулей восьмеричных чисел используется спецификатор %#o, для вывода 0x перед шестнадцатеричными числами используется спецификатор %#x. При использовании %#f и %#e десятичная точка будет выводиться, даже если в числе нет дробной части.
- Число, определяющее минимальную ширину поля. Минимальная ширина поля используется для задания столбцов. Например, %15d напечатает по меньшей мере 15 символов. Число будет выравнено по правому краю и дополнено слева до 15 символов пробелами. При применении этого формата на последующих строчках будет напечатан выравненный по правому краю столбец шириной 15 символов. Число печатается, даже если его длина превышает 15 символов,так как 15 — это минимальная ширина поля.
- Символ точка (.), отделяющий ширину поля от величины, устанавливающей точность.
- Число (точность) использующееся для ограничения количества выводимых символов. При использовании вместе с %f (например, %.2f), она ограничивает количество цифр после десятичной точки (в данном примере до 2). %15.2f выводит вещественное число с двумя знаками после десятичной точки в поле с минимальной шириной 15 символов, включая десятичную точку. Использование точности с %s (например, %.15s) определяет максимальное количество выводимых символов (в данном примере 15). Точное количество выводимых символов можно контролировать, задавая и минимальную ширину поля и точность (максимальное количество символов), например, 15.15.
- Модификаторы h, l или L. Символ h указывает на то, что соответствующий аргумент должен печататься как short или unsigned short; символ l сообщает, что аргумент имеет тип long или unsigned long; символ L сообщает, что аргумент имеет тип long double.
Пример 2
Пусть для вывода некоторого набора данных используется следующий вариант функции printf():
printf("%d %d %s %f\n", mod, gt, it, cst);
Вывод будет выглядеть следующим образом:
2901 6 Cerebral Calculator 75.489998
30 7229 Blue Ribbon Cable 26.000000
31650 100 Glow Worm Glare Screen 89.989998
2 677 Personal Mainframe 9000.000000
Пример 3
Пусть для вывода этого же набора данных используется вариант функции printf()с возможностями дополнительного форматирования:
printf("%-6d %4d %-24s %7.2f\n", mod, gt, it, cst);
В этом случае вывод будет выглядеть следующим образом:
2901 6 Cerebral Calculator 75.48
30 7229 Blue Ribbon Cable 26.00
31650 100 Glow Worm Glare Screen 89.98
2 677 Personal Mainframe 9000.00