Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по С++.doc
Скачиваний:
27
Добавлен:
20.08.2019
Размер:
2.26 Mб
Скачать

4.2.2. Форматы вывода данных

Строка описания форматов вывода может содержать:

1) Спецификации формата, которые определяются символом % - для вывода .Значений, определенных списком аргументов, если они есть;

2) Любые символы, которые должны быть выведены в выходной поток;

3) управляющие коды, то есть Esc-последовательности для управления про­цессом вывода (см. табл. 17).

Форматы начинаются с символа % и имеют следующую форму:

% [ flags ] [ w ] [ .p ] [ F | N | h | l | L ] тип

где flags - управляет выравниванием выводимых символов;

w - width - ширина - минимальное количество выводимых символов, размер

поля для вывода значения;

р - precision - точность - определяет максимальное количество выводимых

символов или положение десятичной тoчки числа;

F, N - определяют тип адресации при выводе указателей;

h, l, L - определяют уточнение аргумента: short, long или double.

В квадратных скобках указаны необязательные элементы формата.

Каждое поле формата это символ или число. Тип определяет, как будет ин­терпретироваться аргумент, соответствующий данному формату: как символ, строка или число. В простейшем случае формат может иметь символ % и тип. Например:

Тип

Выводимое значение

Тип аргумента

d, i

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

int

о

восьмеричное целое без знака

int

u

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

unassigned int

x

шестнадцатеричное целое без знака, использующее символы "аЬсdef"

int

X

“—” "АВСDEF"

int / long int

е, Ё

число с плавающей точкой

float / double

f, F

число с фиксированной точкой

float / double

с

символ, в том числе пробел

char

s

строка

сhаr

Состав и назначение символов flags:

- - результат прижимается в выделенном для него поле влево, оставляя справа пробелы; по умолчанию все результаты в выделенном поле прижимаются вправо;

+ - выводит перед числом + или -; по умолчанию - только -;

_ - добавляет при выводе положительных чисел слева от числа пробел вместо знака +;

# - при выводе по форматам о,х или X добавляется префикс числа: 0, 0х или 0X соответственно.

Поле w - неотрицательное десятичное целое; определяет минимальное ко­личество выводимых символов. Если количество выводимых символов меньше, слева или справа от него (в зависимости от значения flags) остаются пробе­лы. Если количество выводимых символов больше, чем задано w, или w не задано вообще, выводятся все символы аргумента (в том числе - все целые разряды числа).

Поле р - precision - неотрицательное целое, определяет:

- при выводе целых значений форматами d, i, o, u, x, X - вывод не менее р цифр; если их меньше, слева добавляются нули;

- при выводе вещественных значений форматом f или lf - количество дробных разрядов;

- при выводе вещественных значений форматом е или le - разрядность дроб­ной части выводимой мантиссы;

- при выводе строк форматом s: точное количество символов, которое должно быть выведено; если выводимая строка содержит символов больше, чем значение р, лишние правые символы не выводятся;

- на вывод символов форматом с значение р не влияет.

Форматом “%hi” можно выводить целые значения <= 32767.

Форматы с l - уточнением аргумента: "%ld", “%lo", "%lu", "%lx" - можно ис­пользовать только для вывода данных уточненного типа; например "%ld мож­но использовать только для вывода значений типа long; а "%lf” и “%le" - для float и double. Форматами “Lf” и “Le” можно выводить только значения типа long или double.

Если за символом % следует символ, не являющийся символом формата, % просто копируется в выводной поток как обычный символ. Все неформатные символы строки format просто копируются в выходной поток в порядке их сле­дования в строке format. Например, оператор:

printf ( "Первая строка % \nВторая строка\n" ) ;

выводит:

Первая строка %

Вторая строка

Обычные символы могут быть в строке format вперемежку с форматами ар­гументов, например, для идентификации выводимых значений:

printf ( " а = %d b[%d] = %f st = %s\n", a, i, b[ i ], st ) ;

Этот оператор может вывести:

а = 123 b[2] = 1.234567 st = ВСЕ

Форматный вывод арифметических данных

Для вывода целых чисел можно использовать форматы вида:

"%d”, “%wd”, “%w.pd”, “%.pd”.

При выводе целых чисел форматами типов d, i, u, о, х, X значение поля р оп­ределяет минимальное количество цифр, которые будут выведены. Если коли­чество выводимых разрядов числа меньше заданного р, выводимое значение дополняется слева нулями, например, для формата "%.5d” может быть выведе­но: 00123.

Ниже приведен пример программы для вывода значений ряда инициа­лизированных переменных различными форматами с помощью fprintf и резуль­таты ее выполнения.

В примере в строке для вывода заголовка таблицы каждый сим­вол % удвоен для вывода одного символа %.

Для вывода числа типа float в форме с фиксированной точкой можно ис­пользовать форматы вида: "%f, "%wf”, "%w.pf” или "%.pf”.

Для вывода числа в форме с плавающей точкой (в экспоненциальной фор­ме, в виде мантиссы и порядка) можно использовать форматы вида: "%е", "%wе", "%w.ре" или "%.ре".

Для форматов вида "%f, "%wf", "%е" и "%we” по умолчанию р = 6.

При выводе значений с помощью форматов типа "%f” выводимое значение со знаком имеет форму: [-]ссс.dddd где:

ссс - один и более целых разрядов; количество целых разрядов зависит от величины выводимого значения; всегда выводятся все разряды целой части значения;

dddd - р дробных разрядов; для р = о дробные разряды и точка не выводятся.

Для вывода форматом типа "%f” минимальное значение поля w можно определить по формуле: w = р + k + 2, где:

р - количество дробных разрядов;

к – количество целых разрядов;