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

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

Посимвольная передача данных является самой основной формой файловых операций. Хоть она и не при- надлежит к числу широко распространенных на практике способов обращения с информацией, тем не ме- нее, она хорошо иллюстрирует основные принципы работы с файлами. В приведенной ниже программе происходит посимвольная запись данных в файл, которая продолжается до тех пор, пока не нажата кла- виша 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),

после чего файл закрывается.

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

Для посимвольного чтения из файла используется функция 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), что, собственно, и является признаком достижения конца файла.

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

Работа со строками

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

Функция fputs() имеет следующий синтаксис:

fputs(string_variable, file_pointer);

Эта функция выполняет построчную запись данных в файл или вывод на принтер, но не добавляет код

«новая строка». Для того чтобы каждая строка записывалась на диск (или печаталась на принтере) дей- ствительно как отдельная строка, необходимо вводить код «новая строка» вручную. Например, в приве- денной ниже программе создается файл имен:

/*fputc.c*/

#include main()

{

FILE *fp; char flag; char name[20];

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

{

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

flag = 'y';

exit();

}

while(flag != 'n')

{

puts("Введите имя"); gets(name); fputs(name, fp); fputs("\n",fp);

printf("Желаете ввести другое имя?"); flag=getchar();

putchar('\n');

}

fclose(fp);

}

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

Выполнение цикла while продолжается до тех пор, пока в ответ на подсказку не будет введен символ n. В этом цикле осуществляется ввод имени с клавиатуры с помощью функции gets(), после чего имя записы- вается на диск с помощью функции fputs(). Далее в файл записывается код «новая строка», и, наконец, программа спрашивает пользователя, желает ли он продолжить ввод имен.

Если ваш компилятор может использовать функцию strlen(), можно несколько упростить процедуру ввода, используя следующие инструкции: