Шаг 7.
Функция printf()

    Здесь мы познакомимся с основными возможностями функции printf().

    Эта функция появилась в языке программирования C для организации форматного вывода информации. В связи с тем, что C++ был создан на базе языка C, использование этой функции в программах на C++ в некоторых случаях бывает более удобным, чем применение стандартных потоков cout и cin. В связи с этим на данном шаге мы перечислим основные особенности использования этой функции.


Замечание. Прототип этой функции находится в заголовочном файле stdio.h.

    Формат, указываемый при обращении к функции printf(), выглядит следующим образом:

     printf (Управляющая_строка,Аргумент1,Аргумент2,...);

где 1) Аргумент1, Аргумент2,... - это печатаемые параметры, которые могут быть переменными, константами или выражениями, вычисляемыми перед выводом на печать;
2) Управляющая_строка - строка символов, показывающая, как должны быть напечатаны параметры.

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

    Формат определяется следующим образом:

     %[флажки][ширина][.точность][F|N|h|l|L] преобразование

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

    Формат (команда преобразования) начинается с обязательного знака процента. Флажки задают правила выравнивания, знаки "+" и "-", десятичную точку, хвостовые нули и префиксы для восьмеричных и шестнадцатеричных значений. Ширина задает размер поля вывода, в котором выводимый текст дополняется символами пробела или нулями. Точность, которая должна начинаться с точки, обозначает точность числа - для чисел с плавающей точкой, или минимальное число цифр - для целых чисел. Один из нескольких модификаторов позволяет указать характеристики, связанные с размером выводимого значения:

Требуемый тип данных выбирается соответствующим символом преобразования.

    Далее описываются все части форматной строки. При ее составлении для избежания неоднозначности, производите выбор из одного набора опций за раз, используя приведенный выше синтаксис для уточнения порядка, в котором нужно применять следующие ниже значения.

    1. % - встроенные команды преобразования должны начинаться со знака процента. Чтобы вставить в выводимый текст сам знак процента, его нужно указать дважды: %%.

    2. флажки - не являются обязательными. Если они присутствуют, то могут состоять из одного или нескольких указанных в таблице 1 символов.

Таблица 1. Флажки для функции printf()
Флажок
Описание
-
Выводимый текст выравнивается по левому краю. Все оставшееся справа пустое пространство заполняется пробелами. По умолчанию текст выравнивается по правому краю.
+
Числовые значения предваряются знаком плюса или минуса. Обычно только отрицательные значения предваряются знаком минуса.
' ' (пробел)
Перед положительными числовыми значениями выводится пробел, а перед отрицательными - знак минуса. Этот режим действует по умолчанию, поэтому не употребляйте этот флажок вместе с флажком +. Не заключайте символ пробела в апострофы!
#
В случае использования символа преобразования x или X ненулевые аргументы предваряются префиксом 0x или 0X соответственно. В случае символа преобразования o результат предваряется цифрой 0. Если используется преобразование e, E или f, в выводимом тексте, изображающем число, будет присутствовать десятичная точка (обычно она выводится только для дробных значений). Если используется преобразование g или G, в выводимом тексте, изображающем число, будет присутствовать десятичная точка и хвостовые нули не подавляются (как это имеет место по умолчанию).

    3. ширина - задает минимальную ширину поля вывода (в символьных позициях). Любое свободное пространство обычно заполняется пробелами. Но если значение ширины начинается с цифры 0, эти добавляемые пробелы заменяются нулями. В качестве ширины можно также указать символ * ("звездочка"), что приводит к использованию значения следующего аргумента типа int в качестве ширины поля. В этом случае задается два значения: целое значение, задающее минимальную используемую ширину, и значение, выводимое в этом поле. Значение, задающее ширину, должно располагаться перед выводимым значением.
Если указана нулевая ширина, то вывод производится в поле переменной ширины и дополняется ведущими нулями. Можно задавать меньшую ширину, чем требуется, для представления значения. Ширина поля вывода увеличивается по мере необходимости, чтобы обеспечить вывод значения без отсечения.

    4. точность - если в этом месте форматной строки присутствует точка, то следующее за ней значение представляет точность, используемую для представления форматируемого результата. Интерпретация точности зависит от типа форматируемого элемента.
За точкой должно следовать целое значение. Это значение по умолчанию равно 0, что означает отсутствие компонента точности. Для символов преобразования d, i, o, u, x и X по умолчанию это значение равно 1. Для символов e, E и f по умолчанию это значение равно 6. Для g и G - переменному числу значащих цифр. Для символов s и c - полному числу символов.
Для символов преобразования g и G точность представляет максимальное число значащих цифр сформатированного результата. Для преобразований e, E и f точность равна числу используемых десятичных позиций, а последняя цифра округляется. В случае использования s точность указывает максимальное число используемых символов строки. Точность никак не влияет на результат с использованием символа преобразования c - всегда выводится один символ. Для преобразований d, i, o, u, x и X выводится столько цифр, сколько указано точностью, дополненных, при необходимости, слева цифрами 0.

    5. преобразование - задает тип соответствующего аргумента. Программист сам несет ответственность за правильность типа этого аргумента. Например, если используется символ преобразования g, то аргумент должен быть значением с плавающей точкой. В таблице 2 перечислены все допустимые символы преобразования, причем в каждой отдельной команде можно использовать только один из указанных символов.

Таблица 2. Символы преобразования для функции printf()
Символ преобразования
Описание
%
Выводится символ процента.
c
Выводится символ, заданный соответствующим аргументом.
d
Выводится десятичное число со знаком.
e
Значение типа double будет выведено в экспоненциальной форме, например: 1.045e+12.
E
Аналогично предыдущему, но в результат буде помещена прописная (заглавная) буква E.
f
Значение типа double будет выведено в десятичном формате, например: 1234.56.
g
Значение типа double будет выведено либо в экспоненциальной форме, либо в десятичном формате. Автоматически выборается либо преобразование f, либо e, в зависимости от того, какое из них дает более точный результат в приемлемом небольшом поле вывода.
G
Аналогично предыдущему, но в случае представления числа в экспоненциальной форме используется прописная (заглавная) буква E вместо строчной (маленькой) буквы e.
i
То же, что и d - выводится десятичное число со знаком.
n
Значение аргумента интерпретируется как указатель на переменную типа int, в которой функция printf() запоминает число символов, записанных до этого на устройство вывода (stdout). Это преобразование не отправляет на устройство вывода никаких символов.
o
Выводится беззнаковое восьмеричное число.
p
Выводится значение указателя. В моделях памяти tiny (крошечной), small (малой) и medium (средней) указатели форматируются как шестнадцатеричные значения смещения. В моделях памяти compact (компактной), large (большой) и huge (огромной) указатели форматируются как шестнадцатеричные значения сегментного компонента адреса и компонента смещения, разделенные двоеточием.
s
Выводится содержимое завершающейся нулем строки. Задавая значение точности, можно ограничить вывод требуемым максимальным числом символов.
u
Выводится беззнаковое десятичное число.
x
Выводится беззнаковое шестнадцатеричное число, для представления которого используются цифры от 0 до 9 и строчные буквы a, b, c, d, e, f.
X
Аналогично предыдущему, но используются прописные буквы A, B, C, D, E, F.


    Мы рассмотрели формат функции printf(). На следующем шаге приведем примеры ее использования.


Предыдущий шаг Содержание Следующий шаг