Функция printf

Функция printf

Для вывода данных в языке C используется функция printf. Для использования этой функции необходимо подключить заголовочный файл stdio.h:

#include<stdio.h>

Если вы пишете на C++, то лучше подключать файл cstdio:

#include<cstdio>

Функция printf получает один или более аргументов. Первый аргумент - строка, которую нужно вывести. Например, если нужно просто вывести какой-то текст, то можно написать так:

printf("Hello, world\n");

Символ '\n' в конце вывода означает символ перехода на новую строку.

Если нужно вывести значения какой-то переменной, то в форматной строке вместо этой переменной указывается специальное выражение, начинающееся с символа "%". Например, для вывода целого числа типа int указывается строка "%d". Сами переменные указываются после форматной строки, следующими параметрами, передаваемыми функции printf.

Например, чтобы напечатать значения переменных a и b типа int через пробел можно использовать следующую функцию:

printf("%d %d", a, b);

Выводимые типы

Перечислим разные типы данных, которые можно выводить при помощи функции printf и соответствующие им форматные строки.

%d
или
%i
Выводится целое число (значение типа int) в десятичной системе счисления. Для вывода значений типа short int используется %hd, long int - %ld, long long int - %lld.
%u Выводится беззнаковое целое число (значение типа unsigned int) в десятичной системе счисления. Для вывода значений типа unsigned short используется %hu, unsigned long - %lu, unsigned long long  - %llu.
%e Выводится значение типа double в экспоненциальной форме, например, число 123.456 будет выведено в виде 1.234560e+002. Для вывода значения типа double также используется %le, для вывода long double - %Le (в Windows может не работать).
%f Выводится значение типа double с фиксированной точкой. Например, число 1e20 будет выведено, как 10000000000.000000. Для вывода значения типа double также используется %lf, для вывода long double - %Lf (в Windows может не работать).
%g Значение типа double выводится либо с фиксированной точкой, либо с плавающей точкой, в зависимости от величины числа. Аналогично используется %lg для double и %Lg для long double.
%c Выводится один символ (значение типа char).
s выводится содержимое C-строки. В качестве параметра передается указатель char * или массив символов char[].
%% Вывести один символ %, никакого значения переменной при этом не передается.

 Значения целых чисел также можно выводить в восьмеричной или шестнадцатеричной системах счисления.

Обратите внимание, переменную типа float вывести при помощи функции printf нельзя (можно привести значение типа float к типу double и вывести его).

В операционной системе Windows не рекомендуется использовать тип long double.


 

Модификаторы длины

Эти модификаторы пишутся между знаком % и символом, обозначающим тип. Например, %lld. Эти модификаторы используются для того, чтобы вывести значения типов short int, long int, long double и т.д. и уже упоминались раньше.

hh Используется для значения типа char вместе с символами d, i, u для вывода в виде десятичного числа, соотвветствующего его ASCII-коду.
h Используется для значения типа short int или unsigned short int вместе с модификаторами d, i, u.
l

Используется для значения типа long int или unsigned long int вместе с модификаторами d, i, u.

Используется для значения типа double вместе с модификаторами e, f, g.

ll Используется для значения типа long long int или unsigned long long int вместе с модификаторами d, i, u.
L Используется для значения типа long double вместе с модификаторами e, f, g. Не следует использовать в Windows.

Ширина поля вывода

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

Если перед шириной поля поставить цифру 0, например, "%010d", то число будет дополняться слева не пробелами, а нулями. Это удобно, например, для вывода времени в формате hh:mm, что можно сделать, например, так:

printf("%02d:%02d", h, m);

Если перед шириной поля поставить знак "-", то число будет дополняться пробелами не слева, а справа (сначала выводится число, потом - дополнительные пробелы до заполнения всего поля).

Также вместо ширины поля вывода можно указать символ "*" (звездочка), тогда значение ширины поля вывода нужно передать в качестве дополнительного параметра. Например, запись:

printf("%*d", n, a);

означает вывести значение переменной a используя поле шириной n символов.

Точность вывода действительных чисел

По умолчанию действительные числа выводятся с 6 знаками после точки, при этом числа в экспоненциальной форме выводятся в виде одной цифры, точки и 6 цифр после точки (и показателя степени).

Для изменения точности вывода действительных чисел в форматной строке указывается символ точки ('.') и после нее число - количество выводимых знаков после точки. Например, так:

printf("%.10lf", x);

Вывод целых чисел со знаком +/-

Если при выводе целого числа в форматной строке задать символ "+", то положительные числа будут выводиться с обязательным знаком "+" перед ними.

Большинство перечисленных выше параметров комбинируются друг с другом. Например, такая строка:

printf("%+020lld", n);

означает вывод числа типа long long, со знаком "+" или "-" перед числом, с добавлением нулей таким образом, что общее число выводимых символов будет не меньше 20.