Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Моя первая программа на С++.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Текстовый и двоичный форматы

Функции putc(), fputc() и fputs() служат для вывода текста. Если вы просмотрите дисковый файл, исполь- зуя команду TYPE, то увидите точно такие же символы, какие ввели. Файл можно создать, использовав любую из этих функций, а затем прочитать из него с помощью функций getc(), fgetc() или fgets(). При этом функции, осуществляющие посимвольное чтение, будут вводить по одному символу, даже если изна- чально в файл была записана строка с помощью функции fputs(). Аналогично, функции, предназначенные для построчного чтения из файла, будут вводить данные целыми строками, даже если информация в файл была записана посимвольно.

В Листинге 12.8 приведен текст программы, которая копирует содержимое одного файла в другой, одно- временно отображая его на экране. Программа будет работать с любым файлом, безотносительно того, как именно он был создан. В программе определены два указателя на файлы, так как мы обращаемся к двум файлам одновременно.

Листинг 12.8. Программа копирования содержимого файлов.

/*filecopy.c*/

#include "stdio.h" main()

{

FILE *fp1, *fp2;

char infile[25], outfile[25]; int letter;

printf("Введите имя файла для чтения: "); gets(infile);

if ((fp1 = fopen(infile, "r")) == NULL)

{

printf("Невозможно открыть

файл %s", infile);

exit();

}

printf("Введите имя файла для записи: "); gets(outfile);

if ((fp2 = fopen(infile, "w")) == NULL)

{

printf("Невозможно открыть

файл %s", outfile);

}

fclose(fp1); exit();

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

{

putchar(letter);

fputc(letter, fp2);

}

fclose(fp1); fclose(fp2);

}

Первый файл открывается с режимом доступа "r", чтобы можно было прочитать из него данные. Если файл невозможно открыть, программа завершается. Второй файл открывается с режимом доступа "w", что позволяет записывать в

Рис. 12.6. Функция fprintf() записывает числовые значенияв виде текстовых символов

него данные. Если второй файл невозможно открыть, то перед завершением программы сначала закрыва- ется первый файл. Это дает нам гарантию того, что первый файл, если он был успешно открыт, не ока- жется поврежден в момент выхода из программы.

Функция fprintf() записывает все данные в виде текста. Например, если использовать fprintf() для записи числа 34.23 на диск, пять символов будут записаны так, как это показано на рис.12.6. Если в дальнейшем для чтения данных из файла используется функция fscanf(), символы будут преобразованы в числовое значение и в таком виде записаны в переменную.

Вследствие того, что функция fprintf() записывает данные в виде текста, чтение из файла можно осущест- влять и с помощью функций getc(), fgetc() или fgets(). Однако эти функции будут читать информацию в виде «печатных» символов. Например, если использовать функцию fgets(), числа будут считываться в ви- де символов, являющихся частью строки. При отображении на экране или печати на принтере данных, прочитанных с использованием функции fgets() или fgetc(), вы будете лишены возможности выполнения арифметических операций над отдельными элементами данных.