Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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 преобразуется с помощью "альтернативной формы". Смотри следующую таблицу.
· необязательный спецификатор ширины, [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 символов, оно может быть усечено или округлено (в зависимости от символа типа).
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).
· type - символ типа преобразования.
!!! Бесконечные числа с плавающей точкой выводятся как +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: 629; Нарушение авторских прав |