Рядок формату, що використовується в багатьох функціях виведення даних (printf, cprintf, sprintf та ін), складається із звичайних символів, керуючих послідовностей символів та специфікацій полів формату виведення аргументів. Звичайні символи та послідовності, що управляють, просто копіюються у вихідний рядок.
Специфікації полів формату починаються з символу % і мають вигляд:
%[flags] [width] [.precision] [F|KIh|l|L]type
Усі символи специфікації записуються без пробілів між ними.
Єдиним обов’язковим елементом специфікації є type – символ, що вказує на тип даних поля, що вводиться. Інші необов’язкові елементи задають параметри форматування:
Значення | Опис | |
[flags] | Прапори вирівнювання, управління печаткою знака числа, управління пробілами, десятковою точкою, основою друку (вісімкова, шістнадцяткова) | |
[width] | Ширина поля – мінімальна кількість символів, що виводяться. | |
[.precision] | Специфікатор точності – максимальна кількість символів, що друкуються, або мінімальна кількість розрядів цілого, що друкується. | |
[F|N|h|l|L] | Модифікатори, які змінюють розмір аргументу за замовчанням: | |
N – ближній вказівник (near) F – дальній вказівник (far) h – short int l – long L – 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 | Виводиться, принаймні n символів. Якщо виводу потрібно менше символів, то зайві позиції зліва заповнюються нулями. |
* | Ширину поля задає черговий аргумент зі списку. |
Специфікатор точності 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 |