Рядок форматування функцій виведення

Рядок формату, що використовується в багатьох функціях виведення даних (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,0000001,100000e+05110000110000,
-110000000,000000-1,100000e+08-1,1e+08-1,10000E+08
0,0001101,100000e-040,000110,000110000
0,0000001,100000e-071,1e-071,10000Е-07
12,0000001,200000e+011212,0000
0,0000000,000000e+0000,00000

Приклади впливу флагів:

СпецифікаціяРезультат
%6i12
-12
%-6i12
-12
%+6i+ 12
-12
%06i000012
-00012

Приклади впливу точності:

%f123456789,0000000,123457
%.5f123456789,000000,12346
%.4f123456789,00000,1235
%.3f123456789,0000,123
%e1,234568e+081,234568e-01
%. 5e1,23457e+081,23457e-01
%.4e1,2346e+081,2346e-01
%.3e1,235e+081,235e-01
%g1,23457e+080,123457
%.5g1,2346e+080,12346
%.4g1,235e+080,1235
%.3g1,23е+080,123

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *