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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Функции fopen(), getc(), putc() и fclose() — это минимальный набор функций для операций с файлами. Следующая программа, KTOD, представляет собой простой пример, в котором используются только функции putc(), fopen() и fclose(). В этой программе символы считываются с клавиатуры и записываются в дисковый файл до тех пор, пока пользователь не введет знак доллара. Имя файла определяется в командной строке. Например, если вызвать программу KTOD, введя в командной строке KTOD TEST, то строки текста будут вводиться в файл TEST.

/* KTOD: программа ввода с клавиатуры на диск. */

#include <stdio.h>

#include <stdlib.h>

 

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

{

FILE *fp;

char ch;

 

if(argc!=2) {

printf("Вы забыли ввести имя файла.\n");

exit(1);

}

 

if((fp=fopen(argv[1], "w"))==NULL) {

printf("Ошибка при открытии файла.\n");

exit(1);

}

 

do {

ch = getchar();

putc(ch, fp);

} while (ch!= '$');

 

fclose(fp);

 

return 0;

}

Программа DTOS, являющаяся дополнением к программе KTOD, читает любой текстовый файл и выводит его содержимое на экран.

/* DTOS: программа, которая читает файлы

    и выводит их на экран. */

#include <stdio.h>

#include <stdlib.h>

 

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

{

FILE *fp;

char ch;

 

if(argc!=2) {

printf("Вы забыли ввести имя файла.\n");

exit(1);

}

 

if((fp=fopen(argv[1], "r"))==NULL) {

printf("Ошибка при открытии файла.\n");

exit(1);

}

 

ch = getc(fp); /* чтение одного символа */

 

while (ch!=EOF) {

putchar(ch); /* вывод на экран */

ch = getc(fp);

}

 

fclose(fp);

 

return 0;

}

Испытывая эти две программы, вначале с помошью KTOD создайте текстовый файл, а затем с помошью DTOS прочитайте его содержимое.

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

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

int feof(FILE * уф);

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

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

Ясно, что этот метод можно применять как к двоичным, так и к текстовым файлам.

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

/* Копирование файла. */

#include <stdio.h>

#include <stdlib.h>

 

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

{

FILE *in, *out;

char ch;

 

if(argc!=3) {

printf("Вы забыли ввести имя файла.\n");

exit(1);

}

 

if((in=fopen(argv[1], "rb"))==NULL) {

printf("Нельзя открыть исходный файл.\n");

exit(1);

}

if((out=fopen(argv[2], "wb")) == NULL) {

printf("Нельзя открыть файл результатов.\n");

exit(1);

}

 

/* Именно этот код копирует файл. */

while(!feof(in)) {

ch = getc(in);

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

}

 

fclose(in);

fclose(out);

 

return 0;

}

Графика в Си.

Си тіліндегі графика.

17 тарау C  ТІЛІНІҢ ГРАФИКАЛЫҚ ИНТЕРФЕЙСІ 199 бет

Объектно-ориентированное программирование.

Объектілі-ба ғ ыттал ғ ан программалау.

23 тарау ОББ ПРИНЦИПТЕРІ 257 бет



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 29; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.205.223 (0.008 с.)