Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
30
Добавлен:
17.04.2013
Размер:
76.29 Кб
Скачать

Чтение/запись данных в файл.

Работа с файлами предполагает не только открытие и закрытие файлов, но и определенную обработку содержащейся в них информации. При этом нельзя обойтись без операций чтения и записи данных.

Рассмотрим функцию ввода/вывода для работы с файлами.

Функция gets( ) позволяет получить символ из потока. Прототип функции находится в заголовочном файле stdio.h.

Общий вид функции:

int gets(FILE *stream);

FILE *stream-любой файловый поток, открытый для чтения в текстовом режиме.

Если FILE *in;, то ch=gets( ) читает символ из входного потока и передвигает связанный с потоком указатель на следующий символ.

Функция puts( ) предназначена для записи символа ch в файл. Прототип функции- в заголовочном файле stdio.h. Функция выводит символ в файловый поток, например в файл, открытый функцией fopen( ).

int puts(int c,FILE *stream);

здесь:

int c - символ, записываемый в заданный поток;

FILE *stream - любой файловый поток, открытый для вывода.

В случае успеха возвращается c, иначе - EOF.

При работе с форматированными данными используются функции fprintf( ) и fscanf( ), описанные в заголовочном файле stdio.h.

int fprintf(FILE *stream,const char *format[,argument,...]);

записывает форматированный текстовый вывод в файловый поток, открытый для записи или присоединяемый в текстовом режиме. Возвращает количество записанных в поток байтов. Если были обнаружены ошибки, возвращает EOF.

int fscanf(FILE *stream,const char *format[,address,...];

читает текст из потока, преобразуя данные в двоичный вид в соответствии с описателями формата, содержащимися в строке формата format. Результирующие значения записываются в ячейки, заданные адресными аргументами.

FILE *stream - указатель на файловый поток;

const char *format - указатель на строку формата, которая должна содержать один или несколько описателей формата, каждому из которых предшествует символ %;

argument,... - список аргументов, соответствующих описанному формату;

address,... - список адресных указателей, по одному для каждого описателя формата.

Строковые функции при работе с файлами.

Для работы со строками применяются функции fgets( ) и fputs( ) из заголовочного файла stdio.h.

Char *fgets(char *s,int n,FILE *stream);

последовательно читает из файлового потока FILE *stream символы вплоть до следующего символа новой строки, включая его, или максимум n-1 символов. Прочитанные символы помещаются начиная с ячейки, адресуемой аргументом char *s. К концу строки присоединяется символ новой строки, если он прочитан, а также нулевой символ. В случае успеха возвращает char *s, а в случае ошибки - нуль.

char *s - указатель на буфер типа char, длинной по крайней мере n байтов.

int n - максимальное число символов, включая завершающий нулевой, которые должны быть прочитаны, начиная с ячейки, адресуемой аргументом s.

FILE *stream - любой открытый файловый поток, аналогичный возвращаемому функцией fopen( ), открытый для чтения в текстовом режиме.

int fputs(const char*s,FILE *stream);

записывает завершающуюся нулем строку символов в заданный поток. В случае успеха возвращает неотрицательное целое, а в случае ошибки - EOF.

const char*s - указатель на завершающуюся нулем строку, записываемую в выходной поток.

FILE *stream - указатель на файловый поток, аналогичный возвращаемому функцией fopen( ).

Рассмотрим примеры использования представленных функций.

Пример 1.Считать целое число из файла «sam» и записать его в конец файла «data».

#include <stdio.h>

void main( )

{

FILE *fi;

int age;

fi=fopen(«sam», «r»); //считывание

fscanf(fi, «%d»,& age); //fi указывает на «sam»

fclose(fi);

fi=fopen(«data», «a»); //дополнение

fprintf(fi, «sam is %d.\n», age); //fi указывает на «data»

fclose(fi);

}

Пример 2. Считывание файла строка за строкой.

#include <stdio.h>

#define MAXLIN 80

void main( )

{

FILE *f1;

char *string[MAXLIN];

f1=fopen(«story», «r»);

while(fgets(string, MAXLIN, f1)!=NULL)

puts(string);

}

Мы разместим вводимую информацию в символьный массив string.

Функция fgets( ) возвращает значение NULL, если встречает символ EOF. Это позволяет проверить, достигнут ли конец файла.

Соседние файлы в папке Lab4