Направления программирования. История создания языка Си. Особенности языка, страница 4

символ спецификации формата

На экране:  х = …                                                                                                                                      

y = …    значения

Если за % следует символ, который не является символом спецификации, он просто копируется в выходной поток.

Пример:

printf (“ x=%% ”,…);

На экране: х=%

Спецификация формата имеет следующий вид:

…% [<флаги>][<ширина>][.<точность>][h\ l\ L] <символ типа>

Замечание: Спецификация формата не содержит внутри себя пробелов.

Символ типа определяет то, как будет интерпретироваться соответствующий данному формату аргумент, как символ, строка или число.

% символ типа – самая простая спецификация (примеры см. выше)

Символ типа:

d или i – десятичное целое число со знаком

u – десятичное целое без знака

o – восьмеричное целое без знака х,Х – шестнадцатеричное целое без знака

f – с плавающей точкой в форме [-]dddd.dddd –одна или более цифр е,Е – с плавающей точкой в экспоненциальной форме [-]dddd.dddde/E[+/-]dddd

е печатается, когда порядок меньше 4 или больше [точности]. Десятичная точка печатается только в том случае, если за ней следует хотя бы одна цифра. Вместо 3.0 будет 3

g – то же, что и e или f, но более компактно, т.е. либо в экспоненциальной форме, либо нет, в зависимости от результата.

с – символ

s – строка символов

Флаги – последовательность символов, указывающих форму вывода.

Флаги:

“ - “ – выравнивание по левому краю (по умолчанию выравнивание по правому). Если задана ширина, а выводимое значение имеет меньше символов, чем в ширине, то оно дополняется пробелами справа (по умолчанию – слева).

“ + “ - всегда выводит знак для знаковых  типов (по умолчанию – только для отрицательных).

“   “ - добавляет пробел к выводимому значению, если значение со знаком и положительное. Если указаны +  и  пробел , то преобладает +.

Ширина – неотрицательное десятичное число, определяющее минимальное число выводимых символов. Если число меньше, чем ширина, то выводимое значение дополняется пробелами слева или справа в зависимости от установки флага. Если число символов больше, чем это поле, то печатаются все символы.

В качестве полей спецификации формата “ширина и точность” может быть указана *. Это означает, что сам аргумент из списка аргументов является значением этого поля.

Пример:

printf (“%*.*f”, 8 , 3 ,x );

        ширина  точность

Точность – неотрицательное десятичное число, определяющее точное число символов, которые должны быть напечатаны.

Интерпретация точности в зависимости от типа:

Тип                                                                                   Точность 

d , i , u                                                 Определяет минимальное число цифр, которые будут                                                                                                                                                                       

напечатаны. Если число цифр больше точности, то она игнорируется.

e , E , f                                                Определяет число цифр, которые будут напечатаны после десятичной точки, последнее значащее число округляется.

Если точность =0, то десятичная точка не печатается.

По умолчанию точность =6.

g , G                                                  Определяет максимальное число цифр, которые будут напечатаны. По умолчанию печатаются все десятичные цифры.

s                                                       Определяет максимальное число символов, которые будут напечатаны. По умолчанию символы будут печататься, пока  достигнется конец строки (нулевой байт - \0).

Спецификации размера:

h - аргумент трактуется как короткое целое.

l - аргумент трактуется как длинное целое.

L - аргумент трактуется как longint.

п.3.Форматный ввод.

Форматный ввод в Си осуществляется  с помощью функции scanf из стандартного входного потока stdin.

int scanf (<форматная строка>[,<аргументы>]);