Строка формата, используемая во многих функциях вывода данных (printf, cprintf, sprintf и др.), состоит из обычных символов, управляющих последовательностей символов и спецификаций полей формата вывода аргументов. Обычные символы и управляющие последовательности просто копируются в выходную строку.
Спецификации полей формата начинаются с символа % и имеют вид:
%[flags] [width] [.precision] [F|КIh|l|L]type
Все символы спецификации записываются без пробелов между ними.
Единственно обязательным элементом спецификации является type - символ, указывающий на тип данных вводимого поля. Остальные необязательные элементы задают параметры форматирования:
Значение | Описание | |
[flags] | Флаги выравнивания, управления печатью знака числа, управления пробелами, десятичной точкой, основанием печати (восьмеричная, шестнадцатеричная) | |
[width] | Ширина поля - минимальное число выводимых символов | |
[.precision] | Спецификатор точности - максимальное количество печатаемых символов или минимальное количество разрядов печатаемого целого | |
[F|N|h|l|L] | Модификаторы, изменяющие размер аргумента по умолчанию: | |
N F h l L | ближний указатель (near) дальний указатель (far) short int long long double |
Символ | Тип аргумента | Формат вывода | |
d | целый | десятичное signed integer | |
i | целый | десятичное signed integer | |
o | целый | восьмеричное unsigned integer | |
u | целый | десятичное unsigned integer | |
x | целый | шестнадцатеричное unsignedint(с цифрами a, b, с, d, е, f) | |
X | целый | то же, что х, но с цифрами А, В, С, D, Е, F | |
f | действительный | формат с фиксированной точкой: [—]dddd.dddd | |
e | действительный | экспоненциальный (научный) формат: [—]d.dddde[+/-]ddd | |
E | действительный | то же, что е, но с символом Е | |
g | действительный | наиболее компактный из форматов е и fдля данного числа и данной точности; незначащие нули не выводятся | |
G | действительный | то же, что g, но с символом Е в экспоненциальном формате | |
Символы | |||
c | символ | один символ | |
s | указатель на строку | строка символов до нулевого символа в конце или с числом символов, заданных точностью | |
% | нет | печать символа % | |
Указатели | |||
n | указатель на int | в ячейку памяти, на которую указывает аргумент, заносится количество выведенных к данному моменту символов | |
p | указатель | печать аргумента как указателя; в зависимости от используемой модели памяти печатается или XXXX:YYYY, или YYYY(только смещение) | |
Перечисленные ниже флаги flags могут записываться в любой последовательности и в любой комбинации. | |||
Флаг | Пояснение | ||
- | Выравнивание влево, оставшееся поле справа заполняется пробелами. Если этот флаг не задан, то производится выравнивание вправо, а оставшееся поле слева заполняется нулями или пробелами. | ||
+ | Обязательно перед числом указывается знак плюс (+) или минус (—) | ||
пробел | Если значение не отрицательное, то печать начинается с пробела вместо знака плюс (+). Для отрицательного значения знак минус (—) печатается. Если наряду с этим флагом задан флаг +, то он должен быть указан до флага пробела. | ||
# | В форматах о, x, X добавляется префикс O, Ox, OX соответственно. В форматах e, E, f, g, G во всех случаях выводится десятичная точка. Кроме того, в форматах g, G не подавляется вывод незначащих нулей. |
Спецификатор width задает минимальную ширину поля. Спецификатор может быть задан или явным образом десятичным числом, или косвенно - символом звездочки (*). В последнем случае предполагается, что ширину поля задает очередной аргумент из списка.
Спецификатор width указывает только минимальную ширину. Если вывод данного аргумента требует большей ширины поля, то поле расширяется и значение никогда не усекается.
Спецификатор может принимать следующие значения:
Значение | Описание |
n | Выводится, по крайней мере, n символов. Если для вывода требуется меньше символов, то лишние позиции (слева или справа, в зависимости от флагов) заполняются пробелами. |
On | Выводится, по крайней мере, п символов. Если для вывода требуется меньше символов, то лишние позиции слева заполняются нулями. |
* | Ширину поля задает очередной аргумент из списка. |
Спецификатор точности precision определяет максимальное число выводимых символов или место десятичной точки. Он записывается после символа точки (.), чтобы отделить его от предшествующего спецификатора width. Данный спецификатор, как и wiclth, может быть задан или явным образом - десятичным числом, или косвенно - символом звездочки (*). В последнем случае предполагается, что точность задается очередным аргументом из списка.
Отсутствие спецификатора precisionозначает точность по умолчанию и эквивалентно:
Значение | Описание |
1 | для форматов d, i, о, u, x, X |
6 | для форматов e, E, f |
числу значащих цифр | для форматов g, G |
выводу до нулевого символа | для формата s |
не влияет | на формат с |
Возможные значения precision:
.o | Для форматов d, i, о, u, x эквивалентно точности по умолчанию. Для форматов e, E, f означает вывод без десятичной точки |
.n | Задает вывод n символов или позицию n десятичной точки. Если выводимая величина содержит более n символов, то строка символов усекается, а число может округляться (в зависимости от формата) |
* | Точность задает очередной аргумент из списка. |
Ниже приведены сведения о влиянии значения precisionна различные форматы. | |
d, i, о, u, x, X | Указывает, что должно выводиться, по крайней мере, n цифр. Если число имеет менее n цифр, позиции слева заполняются нулями. Если число имеет более n цифр, число не усекается. |
e, E, f | Указывает, что после десятичной точки должно выводиться n цифр. Последняя цифра округляется. |
g, G | Указывает, что должно выводиться доп цифр. |
c | Спецификатор не влияет. |
N | Указывает, что должно выводиться не более n символов. |
%f | %e | %g | %#G | |
110000,000000 | 1,100000e+05 | 110000 | 110000, | |
-110000000,000000 | -1,100000e+08 | -1,1e+08 | -1,10000E+08 | |
0,000110 | 1,100000e-04 | 0,00011 | 0,000110000 | |
0,000000 | 1,100000e-07 | 1,1e-07 | 1,10000Е-07 | |
12,000000 | 1,200000e+01 | 12 | 12,0000 | |
0,000000 | 0,000000e+00 | 0 | 0,00000 |
Примеры влияние флагов:
Спецификация | Результат | |||
%6i | 12 -12 | |||
%-6i | 12 -12 | |||
%+6i | + 12 -12 | |||
%06i | 000012 -00012 |
Примеры влияния точности:
%f | 123456789,000000 | 0,123457 | ||
%.5f | 123456789,00000 | 0,12346 | ||
%.4f | 123456789,0000 | 0,1235 | ||
%.3f | 123456789,000 | 0,123 | ||
%e | 1,234568e+08 | 1,234568e-01 | ||
%. 5e | 1,23457e+08 | 1,23457e-01 | ||
%.4e | 1,2346e+08 | 1,2346e-01 | ||
%.3e | 1,235e+08 | 1,235e-01 | ||
%g | 1,23457e+08 | 0,123457 | ||
%.5g | 1,2346e+08 | 0,12346 | ||
%.4g | 1,235e+08 | 0,1235 | ||
%.3g | 1,23е+08 | 0,123 |