close

Вход

Забыли?

вход по аккаунту

?

Лаба 7

код для вставкиСкачать
 1
Лабораторная работа №7
Работа с файловыми потоками в С.
Текстовые файлы.
Цель работы:
получить практические навыки решения задач с использованием текстовых файлов на языке С.
Теоретические сведения
Форматированный консольный ввод
-
вывод
Стандартная библиоте
ка С содержит две функции, выполняющие форматирова
н-
ный ввод и вывод стандартных типов данных: printf
() и
scanf
()
. Термин форматирова
н-
ный
подразумевает, что эти функции могут читать или писать данные в различных форм
а-
тах, которыми можно управлять. Функция p
rintf
()
используется для вывода данных на консоль, scanf
()
–
для чтения данных с консоли. Как printf
()
, так
и
scanf
()
могут работать с любыми стандартными типами, включая символы, строки и числа.
Функция printf
()
имеет следующий прототип:
int printf(const char * форматная
_
строка
,
…);
Первый аргумент форматная_строка
определяет способ вывода последующих а
р-
гументов. Он содержит два типа элементов: символы, выводимые на экран, и специфик
а-
торы формата, определяющие способ вывода аргументов, следующих за форматн
ой стр
о-
кой. Спецификаторы формата приведены в таблице 1.
Таблица 1
Код
%
c
%
d
%i
%e
%E
%f
%g
%G
%o
%s
%u
%x
%X
%p
%
n
%%
Формат
Символ
Знаковое десятичное целое число
Знаковое десятичное целое число
Научная нотация (
e
–
строчная)
Научная нотация (
E
–
стро
чная)
Десятичное число с плавающей точкой
Использует или %
e
, или %
f
, соответствующее более короткому представл
е-
нию
Использует или %
E
, или %
f
, соответствующее более короткому представл
е-
нию
Беззнаковое восьмеричное число
Строка символов
Беззнаковое десятично
е число
Беззнаковое шестнадцатиричное число (строчные буквы)
Беззнаковое шестнадцатиричное число (прописные буквы)
Вывод указателя
Ассоциированный аргумент –
это указатель на целое, в которое записывается число уже выведенных символов
Выводит знак %
Функ
ция printf
()
возвращает число напечатанных символов. В случае ошибки она возвращает EOF
.
2
Стандартный ввод с консоли, как правило, осуществляется с помощью scanf
()
. Она читает все стандартные типы данных и автоматически преобразует числа к правильному внутр
еннему формату. Стандартный вид scanf
()
следующий:
int
scanf
(
const
char
* форматная_строка,
…);
форматная_строка
определяет способ чтения значений в переменные, на которые указ
ы-
вает список аргументов. Форматная строка состоит из трх типов символов:
-
Специ
фикаторы формата
-
Специальные символы
-
Стандартные символы
Спецификаторы формата перечислены в таблице 2.
Таблица 2
Код
%
c
%
d
%i
%e
%f
%g
%o
%s
%x
%p
%
n
%
u
%[]
Значение
Читает одиночные символы
Читает десятичное число
Читает десятичное число
Читает число с п
лавающей запятой
Читает число с плавающей запятой
Читает число с плавающей запятой
Читает восьмеричное число
Читает строку
Читает шестнадцатиричное число
Читает указатель
Получает целочисленное значение, равное числу прочитанных символов
Читает беззнаковое
целое
Сканирует множество символов
В scanf
() следует передавать адреса. Это означает, что все аргументы должны быть указателями на переменные. Например, для чтения целого в переменную count
надо и
с-
пользовать следующий вызов scanf
()
:
scanf(“%d”, &count);
Файловая система ANSI
C
Файловая система ANSI
C
является частью системы ввода
-
вывода, позволяющей читать или записывать файлы. Она содержит несколько взаимосвязанных функций. На
и
более типичные показаны в таблице 3
Таблица 3
Имя
fopen()
fclose()
putc()
fpu
tc()
Функция
Открывает файл
Закрывает файл
Записывает символ в файл
Аналогично putc
()
3
getc()
fgetc()
fseek()
fprintf()
fscanf()
feof()
ferror()
rewind()
remove()
fflush()
Читает символ из файла
Аналогично Переходит к указанному байту в файле
Делает то же в файл, что и 葉
() на консоль
Делает то же с файлом, что и ﹦
консолью
Возвращает истину при достижении конца файла
Возвращает истину при обнаружении ошибки
Сбрасывает индикатор позиции файла на начало файла
Стирает файл
Очищает буфер файл
а
Заголовочный файл stdio
.
h
должен включаться в любую программу, использующую да
н-
ные функции.
Заголовочный файл stdio
.
h
предоставляет прототипы для функций ввода
-
вывода и определяет три типа: size
_
t
, fops
_
t
и FILE
. Тип size
_
t
–
это беззнаковое целое, как
и fops
_
t
. Тип FILE
обсуждается в следующем разделе.
Указатель на файл
Указатель на файл –
это указатель на информацию, определяющую различные п
а-
раметры файла, включая его имя, состояние и текущую позицию. В принципе, указатель на файл идентифицирует конкр
етный дисковый файл и используется потоком для выпо
л-
нения операций ввода
-
вывода. Указатель на файл –
это переменная
-
указатель типа FILE
. Для создания файловой переменной
-
указателя используется оператор типа:
FILE
*
fp
;
Открытие файла
Функция fopen
()
открыва
ет для использования поток, связывает файл с данным п
о-
током и затем возвращает указатель FILE
на данный поток. Чаще всего файл рассматрив
а-
ется как дисковый файл. Функция fopen
()
имеет следующий прототип:
FILE *fopen(const char *
имя
_
файла
, const char *
режим
);
где режим указывает на строку, содержащую желаемый режим открытия файла. Некот
о-
рые значения режима показаны в таблице 4.
Таблица 4
Режим
Значение
“r”
Открывает файл для чтения. (По умолчанию как текстовый файл.)
“
w
”
Создат файл для записи. (По умол
чанию как текстовый файл.)
“
a
”
Присоединяет к файлу. (По умолчанию как текстовый файл.)
“
rb
”
Открывает двоичный файл для чтения.
4
“
”
Открывает двоичный файл для записи.
“
”
Присоединяет к двоичному файлу.
“
+”
Открывает файл для чтения и записи. (По
умолчанию как текстовый файл.)
“
+”
Создат файл для чтения и записи. (По умолчанию как текстовый файл.)
“
+”
Присоединяет или создат файл для чтения и записи. (По умолчанию как те
к-
стовый файл.)
Имя_файла должно быть строкой символов, представляющей корректное имя фа
й-
ла операционной системе, и может соде
р
жать указание пути.
Функция fopen
()
возвращает указатель базового типа FILE
. Данный указатель идентифицирует файл и используется большинством функций файловой системы. Его н
и-
когда не следует изменять самостоятельно. Функция возвращает нулевой указатель, если файл не может быть открыт.
Если необходимо открыть файл с именем test
на запись, то следует написать:
fp = fopen(“test”, “w”);
где fp
–
это переменная типа FILE
*. Тем не менее обычно можно увидет
ь следующее:
if((fp = fopen(“test”, “w”))==NULL) {
puts(“Cannot open file.”);
exit
(1);
}
Данный метод позволяет обнаружить ошибки при открытии файла, например, н
а
личие защиты от записи или отсутствие свободного места на диске.
Запись символа
Система вво
да
-
вывода ANSI
C
определяет две эквивалентные функции, выводящие символ –
putc
()
и fputc
()
. Функция putc
()
используется для записи символов в поток, р
а-
нее открытый для записи с помощью функции fopen
()
. Прототип для putc
()
следующий:
int putc(int ch, FILE *fp);
где fp
–
указатель на файл, возвращнный fopen
()
, а ch
–
выводимый символ. По истор
и-
ческим причинам ch
определена как int
, но используется только младший байт.
Если putc
()
выполнена успешно, она возвращает выведенный символ. В противном случае возвр
ащает EOF
.
Чтение символа
5
Имеется две эквивалентные функции, предназначенные для ввода символа –
getc
()
и fgetc
()
. Функция getc
()
используется для чтения символов из потока, открытого на чтение с помощью fopen
()
. Прототип getc
()
следующий:
int getc(FILE
*fp);
где fp
–
это указатель на файл типа FILE
*, возвращнный fopen
()
. По традиции getc
()
во
з-
вращает целое, но старшие байты установлены в 0.
Функция getc
()
возвращает EOF
при достижении конца файла.
Закрытие файла
Функция fclose
()
используется для за
крытия потока, ранее открытого с помощью fopen
()
. Она сохраняет в файл данные, находящиеся в дисковом буфере, и выполняет оп
е-
рацию системного уровня по закрытию файла.
Имеет прототип:
int fclose(FILE *fp);
где fp
–
это указатель на файл, возвращнный fo
pen
()
. Если возвращн 0, то операция з
а-
крытия выполнена успешно, а если EOF
, то, значит, была ошибка.
Помимо основных функций ввода
-
вывода, система буферизированного ввода
-
вывода содержит fprintf
()
и fscanf
()
. Данные функции ведут себя также, как и printf
()
и scanf
()
, за тем исключением, что работают с дисковыми файлами. Они имеют следующие протот
и-
пы:
int fpintf(FILE *fp, const char * форматная
_
строка
,
…);
int fscanf(FILE *fp, const char * форматная
_
строка
,
…);
где fp
–
это указатель на файл возвращаемы
й fopen
()
.
Требования
к отчету.
Отчет должен содержать:
-
наименование и цель работы;
-
краткие теоретические сведения;
-
формулировку задания своего варианта;
-
схему алгоритма
-
текст программы для варианта задания, соответствующего номеру фамилии студента в груп
пе (если студент закреплен за определенной ЭВМ, имеющей номер, то номеру ЭВМ);
-
результаты выполнения программы.
Контрольные вопросы:
1)
Что такое поток?
2)
Что представляет собой файловый указатель?
3)
Перечислить режимы доступа к файлу.
4)
Как открыть и как закрыть
файл?
6
Лабораторное задание.
Для выполнения лабораторной работы необходимо составить программу согласно своему варианту задания.
7
Таблица вариантов
Номер варианта
Задание
1, 12
, 23
Дан файл f
, компоненты которого являются целыми числами. Записать в ф
айл g
, компоненты файла f
, исключив повторные вхождения чисел.
2, 13
, 24
Дан файл f
, компоненты которого являются действительными числами. Найти:
1.
наибольшее из значений компонент f
;
2.
наименьшее из значений компонент с четными номерами;
3.
наибольшее из значен
ий модулей компонент с нечетными номерами;
4.
сумму наибольшего и наименьшего из значений компонент файла f
;
5.
разность первой и последней компонент файла f
.
3, 14
, 25
Дан символьный файл f
. Подсчитать число вхождений в файл каждой из букв a
, b
, c
, d
, e
, f
.
Ре
зультат вывести в файл g
в виде таблицы с комментариями.
4, 15
, 26
Дан файл f
, компоненты которого являются целыми числами. Записать в файл g
все четные числа исходного файла, в файл h
–
все нечетные. Порядок следов
а-
ния чисел сохраняется. Записать в файл g
и h
комментарии.
5, 16
, 27
Дан текстовый файл, содержащий программу на языке Си. Проверить эту пр
о-
грамму на соответствие числа открывающих и закрывающих фигурных скобок.
6, 17
, 28
Дан символьный файл f
. Найти и записать в файл g
самое длинное слово фай
ла f
, снабдив его комментарием.
7, 18
Дан файл f
, компоненты которого являются целыми числами. Получить в фа
й-
ле g
все компоненты файла f
:
1.
являющиеся четными числами;
2.
делящиеся на 3 и не делящиеся на 7;
3.
являющиеся точными квадратами.
Записать в файл g
комм
ентарий.
8, 19
Дан файл f
. Создать два файла, записав в первый из них все четные числа, а во второй –
все нечетные.
9, 20
Дан файл f
. Создать два файла, записав в первый из них среднее геометрич
е-
ское всех четных чисел, а во второй –
среднее арифметическо
е всех нечетных чисел.
1
0
, 2
1
Дан числовой файл f
. Выбрать все значения, которые делятся нацело на 2 и 4, но не делятся на 6. Записать эти значения в файл g
, а все остальные –
в файл h
.
11, 22
Дан текстовый файл f
. Определить, являются ли первые два симв
ола цифрами и если да, то четно ли это число. Записать его в файл g
, если оно четно и в h
,если оно нечетно.
Автор
maximrazor
Документ
Категория
Без категории
Просмотров
621
Размер файла
68 Кб
Теги
лаба
1/--страниц
Пожаловаться на содержимое документа