Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать неотразимый комплимент Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?

Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Форматный вывод - функция printf





Две функции: printf для вывода и scanf для ввода позволяют преобразовывать численные величины в символьное представление и обратно. Они также позволяют ге­нерировать и интерпретировать форматные строки. Мы уже всюду в предыдущих главах неформально использовали функцию printf; здесь приводится более полное и точное описание. Функция

printf(control, arg1, arg2, ...)

преобразует, определяет формат и печатает свои аргументы в стандартный вывод под управлением строки control. Управляю­щая строка содержит два типа объектов: обычные символы, ко­торые просто копируются в выходной поток, и спецификации преобразований, каждая из которых вызывает преобразование и печать очередного аргумента printf.

Строка формата используется при каждом обращении к функциям семейства ...printf для указания того, как функция должна преобразовать, сформатировать и вывести свои аргументы.

Аргументов не должно быть меньше спецификаторов формата. В противном случае результаты непредсказуемы и, возможно, катастрофические. Лишние аргументы (сверх количества, требуемого строкой формата) просто игнорируются.

Строка формата - символьная строка, содержащая объекты двух типов: основные символы и спецификаторы формата.

· Основные символы просто копируются в выходной поток без изменений.

· Спецификаторы формата вызывают применение определяемого ими форматирования к значениям аргументов перед выводом их в поток.

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

 

% [flags] [width] [.prec] [F|N|h|l|L] type

Каждый спецификатор формата начинается с символа процента (%). После % следуют, в указанном порядке:

· необязательная последовательность символов-флагов, [flags] - Выравнивание при выводе, отображение знака числа, десятичной точки, незначащих нулей, восьмеричные и шестнадцатеричные префиксы

o - Результат выравнивается влево и дополняется пробелами справа. Если не задан, результат выравнивается вправо и дополняется слева пробелами или нулями.

o + Результат преобразования с учетом знака всегда начинается со знака плюс (+) или минус (-).



o Пробел Если значение неотрицательно, вывод начинается с пробела вместо плюса; отрицательные значения начинаются с минуса. Плюс (+) имеет приоритет над пробелом ( ), если заданы оба.

o # Определяет, что arg преобразуется с помощью "альтернативной формы". Смотри следующую таблицу.

Символ Воздействие # на arg
c,s,d,i,u Не влияет.
o В начало ненулевого arg добавляется 0.
x или X В начало arg добавляется 0х (или 0Х)
e,E или f Результат всегда содержит десятичную точку, даже если после нее нет цифр. Обычно десятичная точка появляется, только если после нее есть цифры.
g или G То же, что е и Е; кроме того, незна­чащие нули не удаляются.

· необязательный спецификатор ширины, [width] - Минимальное количество символов для печати, дополнение пробелами или нулями. Ширина задается одним из двух способов: непосредственно - строкой десятичных цифр, или косвенно - звездочкой (*). Если вы используете звездочку, минимальная ширина поля вывода определяется значением очередного аргумента (который должен иметь тип int). Ни при каких обстоятельствах спецификатор ширины, его отсутствие или неверное значение не будет вызывать усечения выводимого поля. Если результат преобразования оказывается шире установленного спецификатором, поле вывода просто расширяется, чтобы поместить результат преобразования.

o n По крайней мере n символов будут напечатаны. Если выводимое значение содержит менее n символов, поле вывода дополняется пробелами (справа - если указан символ-флаг "минус"(-), слева - в остальных случаях).

o 0n По крайней мере n символов будут напечатаны. Если выводимое значение содержит менее n символов, поле вывода дополняется нулями слева.

o * Значение спецификатора ширины содержится в списке аргументов и предшествует форматируемому аргументу.

· необязательный спецификатор точности, [.prec] - Максимальное количество символов для печати; для целых чисел - минимальное количество цифр для печати. Спецификатор точности всегда начинается с точки точности (.), которая отделяет его от предшествующего спецификатора ширины. Как и ширина, точность задается либо непосредственно - строкой десятичных цифр, либо косвенно - звездочкой (*). Если вы используете звездочку, точность поля вывода определяется значением очередного аргумента (который интерпретируется как int). Если вы используете звездочки для ширины, точности, или для того и другого, аргумент ширины должен соответствовать текущему спецификатору, за ним должен следовать аргумент точности, а затем - аргумент с данными, которые должны быть преобразованы.

o (не задан) Точность устанавливается по умолчанию: 1 - для типов d, i, o, u, x, X; 6 - для типов e, E, f; все значащие цифры - для типов g, G; выводятся все символы до первого нуль-символа - для типа s; не влияет - на тип с.

o .0 Для типов d,i,o,u,x точность устанавливается по умолчанию; для типов e,E,f - не выводится десятичная точка.



o .n Выводится n символов или n десятичных позиций. Если выводимое значение содержит более n символов, оно может быть усечено или округлено (в зависимости от символа типа).

d,i,o,u,x,X .n указывает, что по крайней мере n цифр будут выведены. Если входной аргумент имеет менее n цифр, выводимое значение дополняется слева нулями. Если входной аргумент имеет более n цифр, выводимое значение не усекается.
e,E,f .n указывает, что после десятичной точки выводятся n символов, и последняя выводимая цифра округляется.
g,G .n указывает, что выводится не более n значащих цифр.
c .n не влияет на выводимое поле.
s .n указывает, что выводится не более n символов.

o * Значение спецификатора точности содержится в списке аргументов и предшествует форматируемому аргументу.

o !!! Если явно задана нулевая точность, И спецификатор формата для данного поля относится к цело­численным (т.е., d,i,o,u,x), И значение, кото­рое должно быть выведено, равно 0, - ни одной цифры не будет выведено в это поле (т.е. поле будет заполнено пробелами).

· необязательный модификатор длины аргумента, [F|N|h|l|L] - Изменяет принимаемое по умолчанию значение длины аргумента влияют на то, как функции семейства ...printf интерпретируют тип данных соответствующего ар­гумента arg. F и N применяются только к аргу­ментам, которые являются указателями (%p, %s и %n). h, l, и L применяются к числовым аргумен­там (целым и с плавающей точкой).:

o N = near pointer. Изменяют интерпретацию arg. Обычно длина arg для преобразований %p, %s или %n соот­ветствует принимаемой по умолчанию для указате­лей в используемой модели памяти. N требует: "Интерпретировать arg как ближний ука­затель".

o F = far pointer. изменяют интерпретацию arg. Обычно длина arg для преобразований %p, %s или %n соот­ветствует принимаемой по умолчанию для указате­лей в используемой модели памяти. F требует: "Интерпретировать arg как дальний указатель".

o h = short int. Замещает установленную по умолчанию длину числовых аргументов: приме­няется только к целым типам, не вли­яют на символьные типы (c,s) или на указатели (p,n).

o l = long. Замещает установленную по умолчанию длину числовых аргументов: l применяется к целым типам (d,i,o,u,x,X) и типам с плавающей точкой (e,E,f,g и G), не вли­яют на символьные типы (c,s) или на указатели (p,n).

o L = long double. Замещает установленную по умолчанию длину числовых аргументов: применяется к целым типам (d,i,o,u,x,X) и типам с плавающей точкой (e,E,f,g и G).

Модификатор длины аргумента Как интерпретируется arg
F arg интерпретируется как дальний указатель.
N arg интерпретируется как ближний указатель. N не может быть использовано ни для каких преобразований в модели памяти huge.
h arg интерпретируется как short int для d, i, o, u, x или X
l arg интерпретируется как long int для d, i, o, u, x или X; arg интерпретируется как double для e, E, f, g или G.
L arg интерпретируется как long double для e, E, f, g или G.

· type - символ типа преобразования.

Символ типа Входной аргумент Формат вывода
Числовые
d integer Десятичное целое (с учетом знака)
i integer Десятичное целое (с учетом знака)
o integer Беззнаковое восьмерич­ное целое
u integer Беззнаковое десятичное целое
x integer Беззнаковое шестнадца­теричное целое (с цифрами a,b,c,d,e,f)
X integer Беззнаковое шестнадца­теричное целое (с цифрами A,B,C,D,E,F)
f floating-point Значение (с учетом знака) в виде [-]dddd.dddd..., где коли­чество цифр после десятичной точки равно значению точности (если задано ненулевое значение точности).
e floating-point Значение (с учетом знака) в виде [-]d.ddd...e[+/-]ddd где одна цифра предшествует десятичной точке; количество цифр после десятичной точки равно значению точности; порядок всегда содержит по крайней мере две цифры
g floating-point Значение (с учетом зна­ка) либо в виде e, либо в виде f, исходя из за­данного значения и точ­ности, причем значение точности определя­ет количество значащих цифр. Незначащие нули и десятичная точка вы­водятся, только если это необходимо. Формат е используется, только если порядок результата преобразова­ния превышает значение точности или меньше -4.
E floating-point То же, что и е, но для экспоненты используется символ E
G floating-point То же, что и g, но для экспоненты используется символ E, если выводит­ся формат e
Символьные
c Character Одиночный символ
s Указатель на строку Символы выводятся, пока не встретится нуль-сим­вол (\0) или пока не будет выведено макси­мальное число символов (значение спецификатора точности)
% нет Выводится символ %
Указатели
n Указатель на int Записывыает (по адресу, на который указывает аргумент) счетчик выведенных ранее символов
p pointer Выводит аргумент в виде указателя. Формат зави­сит от используемой мо­дели памяти: XXXX:YYYY или YYYY (только смеще­ние)

 

!!! Бесконечные числа с плавающей точкой выводятся как +INF и -INF. Не-Число (в смысле IEEE) выводится как +NAN или -NAN.

 

Следующая таблица демонстрирует влияние задания различных спецификаций на печать "HELLO, WORLD" (12 символов). Мы по­местили двоеточия вокруг каждого поля для того, чтобы вы могли видеть его протяженность.

:%10s: :HELLO, WORLD:

:%10-s: :HELLO, WORLD:

:%20s: : HELLO, WORLD:

:%-20s: :HELLO, WORLD :

:%20.10s: : HELLO, WOR:

:%-20.10s: :HELLO, WOR :

:%.10s: :HELLO, WOR:

Предостережение: printf использует свой первый аргумент для определения числа последующих аргументов и их типов. Ес­ли количество аргументов окажется недостаточным или они бу­дут иметь несоответственные типы, то возникнет путаница и вы получите бессмысленные результаты.

Функция возвращает количество выведенных символов или EOF в случае ошибки.






Date: 2015-12-12; view: 247; Нарушение авторских прав

mydocx.ru - 2015-2019 year. (0.009 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию