Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры оп.docx
Скачиваний:
4
Добавлен:
25.09.2019
Размер:
116.07 Кб
Скачать
  1. Использование feof()

Когда файл открыт для двоичного ввода, может быть прочитано значение равное EOF. В результате getc( ) будет отображать состояние конца файла, хотя конец файла не достигнут. Для разрешения этой проблемы в С имеется функция feof( ).

Её прототип:

int feof(FILE *fp);

где fp – идентифицирует файл. Функция feof() возвращает не 0, если достигнут конец файла, в противном случае она возвращает 0. Следующий код читает двоичный файл, пока не встретится конец файла:

while(!feof(fp)) ch = getc(fp);

Следующая программа копирует файл любого типа. Файлы открываются в двоичном режиме, и feof() используется для проверки наличия конца файла:

#include <stdio.h>

#include <string.h>

int main(int argc, char *argv[])

{

FILE *in, *out;

char ch, p[1025], p1[1025];

puts("Input filename");

fgets(p,1025,stdin);

if(p[strlen(p)-1] == '\n') p[strlen(p)-1]='\0';

printf("Length of filename now = %lu\n", strlen(p));

puts("Output filename");

fgets(p1,1025,stdin);

if(p1[strlen(p1)-1] =='\n') p1[strlen(p1)-1]='\0';

printf("Length of filename now = %lu\n", strlen(p1));

if((in=fopen(p, "rb")) == NULL) {

printf("Cannot open source file.");

return 1;

}

if((out=fopen(p1, "wb")) == NULL) {

printf("Cannot open destination file.");

return 1;

}

while(!feof(in)) {

ch = getc(in);

if(!feof(in)) putc(ch, out);

}

fclose(in);

fclose(out);

return 0;

}

  1. Работа со строками: fgets() и fputs()

Файловая система ввода-вывода С содержит две функции, которые могут читать или писать строки в поток – fgets() и fputs(). Они имеют следующие прототипы:

int fputs(const char *str, FILE *fp);

char *fgets(char *str, int длина, FILE *fp);

Функция fputs() подобна puts(), за исключением того, что она пишет строку в указанный поток. Функция fgets() читает строку из указанного потока, пока не встретится символ новой строки или не будет прочитано (длина-1) символов. Если прочитан символ новой строки, то он станет частью строки. В обоих случаях результирующая строка завершается нулевым символом. Функция возвращает str в случае успеха и нулевой указатель - в случае ошибки.

Можно использовать fgets() для чтения строки с клавиатуры. Чтобы сделать это, надо использовать stdin как указатель на файл. Например:

#include <stdio.h>

#include <string.h>

int main(int argc, char *argv[])

{

char s[80];

printf("Enter a string: ");

fgets(s, 80, stdin);

if(s[strlen(s)-1] == '\n') s[strlen(s)-1]='\0';

puts(s);

return 0;

}

  1. fread( ) и fwrite( )

Файловая система предоставляет две функции, позволяющие читать и писать блоки данных - fread( ) и fwrite( ). Их прототипы:

size_t fread(void *буфер, size_t число_байт, size_t объём, FILE *fp);

size_t fwrite(const void *буфер, size_t число_байт, size_t объём, FILE *fp);

В случае fread() буфер – это указатель на область памяти, которая получает данные из файла. В случае fwrite() буфер – это указатель на информацию, записываемую в файл. Длина каждого элемента в байтах определяется в число_байт. Аргумент объём определяет, сколько элементов (каждый длиной число_байт) будет прочитано или записано. fp – это указатель на ранее открытый поток.

Функция fread( ) возвращает число прочитанных элементов. Данное значение может быть меньше, чем объём, если раньше был достигнут конец файла или произошла ошибка. Функция fwrite( ) возвращает число записанных элементов. Данное значение равно объём, если не возникла ошибка.