При работе со строками используются функции fgets(), fputs().
Необходимо помнить о нестандартном представлении строки в языке С, С++, в котором концом строки считается нулевой байт. Большинство других программ, например, текстовые редакторы, программы отображения текстов и т.п. системные программы, концом строки считают ENTER (символ ‘\n’). Т.к. функции ввода / вывода связывают программу на С с «внешней средой», то необходимо выполнять перекодировку символа «конец строки». Рисунок 1 показывает этот процесс.
Запись строк в файл – функция fputs.
Прототип функции:
int fputs (char* str, FILE *fp);
Здесь первый параметр – это указатель на строку, второй – указатель на файл, возвращаемое значение – признак ошибки (NULL – если ошибка, ненулевое значение в противном случае).
Рисунок 1
У функции fputs() есть одна особенность - она не добавляет код \n (ENTER), поэтому его необходимо вводить дополнительным действием.
Пример 15. создать текстовый файл. Ввод закончить при вводе «пустой строки»
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{ FILE *fp;
char name[20]; //строка для имени
if ((fp = fopen(“myfile.txt”, “w”)==NULL)
{ puts(“Nevozmogno otkrit’ file”);
exit(1)
}
while(.t.) //бесконечный цикл
{ printf(“Vvedite imya”);
gets (name); //ввод строки с клавиатуры
if (strlen(name)==0) break; //выход из цикла
fputs (name, fp); //вывод строки в файл
fput(“\n”, fp); //записать «конец строки» в файл
}
fclose(fp); //закрыть файлы
}
Функция strlen() – возвращает длину строки.
Для того, чтобы напечатать строку на принтере, вместо имени файла используется стандартное имя для принтера «prn»:
…
if ((fp=fopen (“prn”, “w”)) == NULL)
…
Чтение строк из файла – функция fgets().
Функция вводит строку из файла до символа «конец строки» (\n). Прототип функции:
char* fgets (char* str_var, int length, FILE *fp);
Здесь str_var – указатель на строку, length – ограничитель длины строки, fp – указатель на файл.
Функция возвращает указатель на введенную строку в случае успеха и нулевой указатель в противном случае.
Пример 16. Чтение строк из файла, созданного в Примере 15
#include <stdio.h>
void main()
{ FILE *fp;
char name[20]; //строка для имени
if ((fp = fopen(“myfile.txt”, “r”)==NULL)
{ puts(“Nevozmogno otkrit’ file”);
exit(1)
}
while(fgets(name, 20, fp)!=NULL)
printf(name);
fclose(fp); //закрыть
}
Обратим внимание, что для указания конца файла используется:
- при построчном чтении fgets() – NULL,
- при посимвольном чтении getс(), fgetс() – EOF.
Форматированный ввод – вывод, использование функции fprintf()
Формат функции fprintf() такой же, как у функции printf(), с той лишь разницей, что добавляется параметр для указания рабочего файла.
Обратим внимание, что код «новая строка» записывается в файл в конце каждой строки. Если посмотреть содержимое файла с помощью текстового редактора, то каждая строка на экране будет начинаться с новой строки: