- •Библиотеки и ввод-вывод данных
- •Ввод-вывод данных. Основные понятия
- •Классификация функций ввода-вывода верхнего уровня
- •Обработка ошибок ввода-вывода
- •Открытие, закрытие и удаление файлов
- •Бесформатный ввод-вывод данных текстовых файлов Посимвольный ввод-вывод данных
- •Построчный ввод-вывод данных
- •Построчный вывод данных
- •Форматный ввод-вывод данных текстовых файлов Форматный ввод данных
- •Форматы ввода данных
- •Форматный вывод данных
- •Форматы вывода данных
- •Форматный вывод арифметических данных
- •Форматный вывод символьных и строковых данных
- •Ввод-вывод записей
- •Ввод записей
- •Вывод записей
- •Дополнительные возможности ввода-вывода данных
Форматный вывод арифметических данных
Для вывода целых чисел можно использовать форматы вида: “%d”, “%wd”, “%w.pd”, “%.pd”.
При выводе целых чисел форматами d, i, o, x, X значение поля p определяет минимальное количество цифр, которые будут выведены. Если количество выводимых разрядов числа меньше заданного p, то выводимое значение дополняется слева нулями.
Для вывода чисел типа float в форме с фиксированной точкой можно использовать форматы вида: “%f”, “%wf”, “%w.pf”, “%.pf”.
Для вывода чисел типа float в форме с плавающей точкой можно использовать форматы вида: “%e”, “%we”, “%w.pe”, “%.pe”.
Для форматов вида “%f”, “%wf”, “%e”, “%we” по умолчанию p =6.
Для формата типа “%f” выводимое значение со знаком имеет форму:
[-] ccc.dddd,
где ccc – один и более целых разрядов; количество целых разрядов зависит от величины выводимого значения; всегда выводятся все разряды целой части значения;
dddd – p - количество дробных разрядов; для p = 0 дробные разряды и точка не выводятся.
Для вывода форматом типа “%f” минимальное значение поля w можно определить по формуле: w = p + k + 2,
где p - количество дробных разрядов;
k - количество целых разрядов;
2 – позиции для знака числа и точки.
При выводе значений с помощью формата “%e” выводимое значение со знаком имеет форму:
[-]m.ddddeDD,
где m – один разряд значения мантиссы до точки;
dddd – нуль и более (р) разрядов мантиссы после точки;
DD – два десятичных разряда порядка.
Для вывода форматом типа “%e” минимальное значение поля w можно определить по формуле: w = (p + 1) + 6. Кроме p + 1 позиции для размещения мантиссы требуются ещё 6 позиций: 4 позиции для размещения порядка и по одной позиции для знака и точки.
Если поле w, определённое в формате “%f”, недостаточно для размещения целой части вещественного значения, система выделяет минимальное поле для её размещения (поле для знака + не выделяется).
Если поле w, определённое в формате “%f”, больше минимального, то выводимое значение смещается в поле вправо или влево в зависимости от значения flags, оставляя слева или справа пробелы.
При выводе вещественных значений форматами “%f” и “%e” точка выводится только тогда, когда число выводится с дробной частью. Другими словами, для форматов “%w.0f”, “%.0f”,”, “%w.0e”, “%.0e” точка не выводится. Последняя десятичная цифра выводимого значения может быть результатом округления.
Форматный вывод символьных и строковых данных
Для вывода символов используется формат типа “%c”, а для вывода строк - формат типа “%s”.
При выводе символов и строк в списках форматов можно использовать символьные константы – управляющие коды и esc-последовательности. Примеры управляющих кодов приведены ниже в таблице.
Код |
Назначение кода |
\n |
новая строка |
\b |
возврат на один символ |
\r |
возврат в начало строки |
\f |
прогон бумаги до конца страницы |
\\ |
вывод обратного слэша |
\’ |
вывод апострофа (одинарной кавычки) |
\” |
вывод кавычек (двойной кавычки) |
\? |
вывод знака вопроса |
\a |
короткий звуковой сигнал |
\07 |
короткий звуковой сигнал |
Замечание Вывод строк допустим с помощью форматов “%s” и недопустим с помощью форматов “%wc”.
Пример
#include <stdio.h>
FILE *fr;
void main ( )
{ char g = ‘d’, *h = “’”, *f = “\МАША\””, *f1 = “\\\\n”;
char b[7] = “ddddd”; r[5] = “eeee”;
fr = fopen (“15vivsim. res”, “w”);
fprintf(fr,
“\ng = ‘%c’, g = ‘%3c’ h = \” %s \”, f = %s , f1 = %s \n”, g, g, h, f, f1);
fprintf(fr,
“\b = %5s r = %5s \n”, b, r);
fclose (fr);
}
Результат выполнения программы:
g = ‘d’, g = ‘ d’ h = “ ’ ”, f = “МАША” , f1 = \\n
b = ddddd r = eeee
Пример Бесформатный ввод и форматный вывод строк двумерного символьного массива
#include <stdio.h>
FILE *fid ,*fr;
void main ( )
{ int i;
char d[3][17];
fid = fopen (“vvv.dat”, “r”);
fr = fopen (“vvv. res”, “w”); fprintf(fr, “\n”);
for ( i = 0; i< 3; i++)
{fgets(d[i], 17, fid);
fprintf(fr, “d[%d] = %s”, i , d[i]);}
fcloaseall();
}
Данные в исходном файле vvv.dat:
111111111111111
222222222222222
333333333333333
Результат выполнения программы(файл “vvv. res”):
d[0] =111111111111111
d[1] =222222222222222
d[2] =333333333333333
Из каждой строки исходных данных вводится 15 символов в элементы массива d[i][0] d[i][14]. В d[i][15] вводится признак конца строки ‘\n’. Затем в соответствии с правилами работы fgets формируется d[i][16] =\0. После ввода значения строки d[i] оно выводится с помощью fprintf.
Для вывода строк могут использоваться форматы вида:
“%s” - вывод всех символов строки;
“%ws” - вывод строки в поле w до первого символа \0;
“%w.ps” - вывод p символов в поле w;
“%.ps” - вывод p символов строки в поле w = p.
