Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
20_04_13_FAJLY_20-04.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
145 Кб
Скачать
☆

Использование fopen(), getc(), putc() и fclose()

Функции fopen(), getc(), putc() и fclose() составляют минимальный набор файловых операций.

Запись символа

Система ввода/вывода ANSI С определяет две эквивалентные функции, выводящие символ - putc() и fputc(). (На самом деле putc() реализована в виде макроопределения.) Поддержка двух идентичных функций необходима для сохранения совместимости со старыми версиями С.

Функция putc() используется для записи символов в поток, ранее открытый для записи с помощью функции fopen(). Прототип для putc() следующий: int putc(int ch, FILE *fp); где fp — это указатель на файл, возвращенный fopen(), a ch - выводимый символ. Указатель на файл указывает putc(), в какой файл следует писать. По историческим причинам ch определена как int, но используется только младший бит.

Если putc() выполнена успешно, она возвращает выведенный символ. В противном случае возвращает EOF.

Чтение символа

Имеется две эквивалентные функции, предназначенные для ввода символа - getc() и fgetc(). Поддержка двух идентичных функций необходима для сохранения совместимости со старыми версиями С.

Функция getc() используется для чтения символов из потока, открытого на чтение с помощью fopen(). Прототип getc() следующий: int getc(FILE *fp); где fp - это указатель на файл типа FILE *, возвращенный fopen(). По традиции getc() возвращает целое, но старший байт установлен в 0.

Функция getc() возвращает EOF при достижении конца файла. Для чтения текстового файла до конца следует использовать следующий код: ch = getc(fp); while(ch!=EOF) { ch = getc(fp); }

Создать текстовый файл "new1.txt" записав в него строку из 50 символов. Все символы, отличные от пробела, переписать в новый файл "new2.txt":

#include <stdio.h>

#include <conio.h>

#include <string.h>

main()

{ char ch, sl[50];

char text[]="one to tree four";

FILE *pf, *pr; // Указатели на файлы

pf=fopen("new1.txt","w"); //Создание нового файла new1.txt

clrscr(); //Экран

fprintf(pf,"%s\n",text); // Запись в файл строки text

fclose(pf); // Закрытие файла pf

pf=fopen("new1.txt","r"); // Открытие файла pf для чтения

pr=fopen("new2.txt","w"); // Создание нового файла new2.txt

while (!feof(pf)) // Пока не конец файла

{ ch=getc(pf); // Чтение символа ch из файла pf

if (ch != ' ')

putc(ch,pr); // Запись в файл pr символа ch

}

fclose(pr); // Закрытие файла pr

rewind(pf); // Возврат указателя на начало файла pf

fgets(sl,50,pf); // Чтение из файла pf строки в переменную sl

printf("%s\n",sl); // Вывод строки sl на дисплей

pr=fopen("new2.txt","r"); // Открытие файла pr для чтения

while (!feof(pr)) // Пока не конец файла pr

{ ch=getc(pr); // Чтение символа из файла pr

putchar(ch); // Вывод символа ch на дисплей

}

fclose(pf); // Закрытие файлов

fclose(pr);

getch();

}

Использование feof()

Как утверждалось ранее, файловая система С может оперировать двоичными данными. Когда файл открыт для двоичного ввода, может быть прочитано целочисленное значение, равное EOF. В результате getc() будет отображать состояние наличия конца файла, хотя физический конец еще не достигнут. Для разрешения данной проблемы в С имеется функция feof(), используемая для определения конца файла при чтении двоичных данных. Она имеет следующий прототип: int feof(FILE *fp); где fp идентифицирует файл. Функция feof() возвращает не 0, если достигнут конец файла, в противном случае она возвращает 0. Следовательно, следующий код читает двоичный файл, пока не встретится метка конца файла: while(!feof(fp)) ch = getc(fp); Данный метод может применяться не только к двоичным, но и к текстовым файлам.