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

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

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

exit();

}

flag = 'y';

while(flag != 'n')

{

puts("Введите имя");

gets(name);

fputs(name, fp);

fputs("\n",fp);

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

flag=getchar();

putchar('\n');

}

fclose(fp);

}

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

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

printf("Пожалуйста, введите имя: ");

gets(name);

while(strlen(name) > 0)

{

fputs(name, fp);

fputs("\n", fp);

printf("Пожалуйста, введите имя: ");

gets(name);

}

Символы, которые вы набираете на клавиатуре, присваиваются строковой переменной name, а затем проверяется, не оказалась ли длина строки равной 0. Если на запрос сразу же нажать клавишу Enter, строка будет иметь нулевую длину и выполнение цикла прекратится. Если до нажатия Enter ввести хотя бы один символ, строка и код «новая строка» будут записаны на диск.

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

printf("Пожалуйста, введите имя: ");

while(strlen(gets(name)) > 0)

{

fputs(name, fp);

fputs("\n", fp);

printf("Пожалуйста, введите имя: ");

}

где ввод строки выполняется внутри условия while.

Для того чтобы напечатать строку на принтере, вместо записи ее на диск используется имя файла "prn". Чтобы открыть файл, требуется указать:

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

Для создания программы печати длина строки определяется равной 81 символу, чтобы строка могла уместиться во всю ширину экрана, прежде чем будет нажата клавиша Enter. В Листинге12.2 приводится текст программы, которая демонстрирует, как можно написать простой текстовый процессор. Строка не посылается на принтер до тех пор, пока не нажата клавиша Enter, что позволяет с помощью клавиши Backspace корректировать ошибки ввода строки.

Листинг 12.2. Программа вывода строки на печатающее устройство.

/*wp.c*/

#include "stdio.h"

main()

{

FILE *fp;

char line[81];

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

{

puts("Принтер не готов к работе");

exit();

}

puts("Введите текст, после ввода каждой строки нажимайте Enter\n");

puts("Для прекращения ввода нажмите Enter в начале новой строки\n");

gets(line);

while (strlen(line) > 0)

{

fputs(line, fp);

fputs("\n", fp);

gets(line);

}

fclose(fp);

}