Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Нейбауэр А. Моя первая программа на С.doc
Скачиваний:
182
Добавлен:
02.05.2014
Размер:
3.75 Mб
Скачать

Функции ввода и вывода

Существует несколько способов передачи данных в файл и получения их из файла в зависимости от используемой функции:

  • посимвольная запись данных в файл или вывод их на принтер с использованием функции putc() или fputc();

  • посимвольное чтение данных из файла с использованием функции getc() или fgetc();

  • построчная запись данных в файл или вывод их на принтер с использованием функции fputs();

  • построчное чтение данных из файла с использованием функции fgets();

  • форматированный вывод символов, строк или чисел на диск или на принтер с помощью функции fprintf();

  • форматированный ввод символов, строк или чисел из файла с помощью функции fscanf();

  • запись целой структуры с использованием функции fwrite();

  • чтение целой структуры с использованием функции fread().

Работа с символами

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

/*fputc.c*/

#include

main()

{

FILE *fp;

char letter;

if((fp = fopen("MYFILE","w"))==NULL)

{

puts("Невозможно открыть файл");

exit();

}

do

{

letter=getchar();

fputc(letter, fp);

}

while(letter != '\r');

fclose(fp);

}

Файл открывается с режимом доступа "w". Если файл с именем MYFILE не существует к моменту выполнения программы, он будет создан. В цикле do, с помощью функции getchar(), осуществляется ввод последовательности символов, которые затем записываются в файл с помощью функции putc(). Синтаксис записи putc() таков:

putc(char_variable, file_pointer);

С теми же аргументами может использоваться и функция fputc().

Цикл выполняется до тех пор, пока не нажата клавиша Enter, которая вводит код «возврат каретки» (\r), после чего файл закрывается.

Буферизированный ввод функции getchar()

Если в вашем компиляторе функция getchar() используется для буферизированного ввода, то для ввода отдельных символов, предназначенных для записи в дисковый файл, вы можете применить вместо нее функцию getche(). В этом случае цикл do...while можно заменить циклом while:

while ((letter = getche())) != '\r')

Посимвольное чтение из файла

Для посимвольного чтения из файла используется функция getc() или fgetc(). Синтаксис записи следующий:

char_variable = getc(file_pointer);

Например, для того чтобы получить символ из файла, связанного с указателем на файл fp, надо написать инструкцию:

letter = getc(fp);

Ниже приведена программа, которая читает файл, созданный в предыдущем примере:

/*fgets.c*/

#include

main()

{

FILE *fp;

int letter;

if((fp = fopen("MYFILE","r"))==NULL)

{

puts("Невозможно открыть файл");

exit();

}

while((letter = fgetc(fp)) != EOF)

printf("%c", letter);

fclose(fp);

}

Здесь файл открывается с режимом доступа "r", после чего в цикле while осуществляется посимвольное чтение. Большая часть работы программы выполняется внутри условия цикла while. Выражение

letter = fgetc(fp)

присваивает символ, полученный из файла, переменной letter. Цикл выполняется до тех пор, пока указатель не достигнет конца файла и значение переменной не станет равно значению специальной константы EOF* (она определена в файле заголовков STDIO.H), что, собственно, и является признаком достижения конца файла.

___________________________________

* Имя константы является аббревиатурой выражения end-of-file. (Прим.перев.)

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