Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Си_3.doc
Скачиваний:
3
Добавлен:
25.08.2019
Размер:
192 Кб
Скачать

Форматный вывод данных

Для форматного вывода данных используются функции printf, fprintf, sprihtf. Правила использования идентичны.

Прототип функции printf:

int printf (char* format [, arg…]);

Функция printf выводит в стандартный выходной поток stdout (на экран) значения, определённые её аргументами. Функция имеет количество параметров. Значение первого параметра format определяет адрес строки, которая управляет интерпретацией выводимых значений. Аргументы определяют имена переменных, значения которых должны быть выведены.

Возвращаемое значение – количество выведенных значений.

Прототип функции fprintf:

int fprintf (FILE* stream, char* format [, arg…]);

Функция fprintf выводит данные в выходной поток stream.

Прототип функции sprintf:

int sprintf (char* str, char* format [, arg…]);

Функция sprintf выводит данные не в файл, а в строку str, расположенную в ОП. Происходит пересылка значений аргументов в строку в соответствии с форматами.

Строка format обрабатывается слева направо. Если аргументов больше, чем форматов, то лишние аргументы игнорируются. Если количество форматов больше, чем количество аргументов, результат будет неопределённым.

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

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

  1. спецификации формата, которые определяются символом ‘%’ для вывода значений, определённых списком аргументов, если он есть;

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

  3. управляющие коды, то есть esc-последовательности для управления процессом вывода.

Форматы имеют следующую форму

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

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

w (width – ширина) – минимальное количество выводимых символов, или размер поля для вывода значений;

p(precision – точность) – определяет максимальное количество выводимых символов или положение десятичной точки числа;

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

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

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

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

Пример

“%d”, “%f”, “%c”, “%s”, “%ld”, “%lf”, “%le”, “%o”, “%x”

Пример Типы форматов вывода

Тип

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

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

d, i

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

int

o

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

int

u

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

unsigned int

x

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

int

X

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

int/ long int

e, E

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

float/ double

f, F

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

float/ double

c

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

char

s

строка

char

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

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

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

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

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

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

Поле p – precision – неотрицательное десятичное целое, определяет:

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

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

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

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

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

Форматом “%hi” можно выводить целые значения, не превышающие 32767.

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

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

Пример

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

Результат вывода:

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

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

Пример

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

Возможен такой результат вывода:

a=123 b[2] =1.234 st = all