Russian Belarusian English German Japanese Ukrainian
  • Главная
  • Строка форматирования функций вывода

Строка формата, используемая во многих функциях вывода данных (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
Ниже приведены возможные значения type.
Символ Тип аргумента Формат вывода
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

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий


Поиск по сайту