netlib.narod.ru | < Назад | Оглавление | Далее > |
В стандартной библиотеке имеется функция ввода fgets, аналогичная функции getline, которой мы пользовались в предыдущих главах.
char *fgets(char *line, int maxline, FILE *fp)
Функция fgets читает следующую строку ввода (включая и символ новой строки) из файла fp в массив символов line, причем она может прочитать не более maxline – 1 символов. Введенная строка дополняется символом '\0'. Обычно fgets возвращает line, а по исчерпании файла или в случае ошибки — NULL. (Наша функция getline возвращала длину строки, которой мы потом пользовались, и нуль в случае конца файла.)
Функция вывода fputs пишет строку (которая может и не заканчиваться символом новой строки) в файл.
int fputs(char *line, FILE *fp)
Эта функция возвращает EOF, если возникла ошибка, и неотрицательное значение в противном случае.
Библиотечные функции gets и puts подобны функциям fgets и fputs. Отличаются они тем, что работают только со стандартными файлами stdin и stdout, и кроме того, gets отбрасывает завершающий символ '\n', а puts его добавляет.
Чтобы показать, что ничего особенного в функциях вроде fgets и fputs нет, мы приводим их здесь в том виде, в каком они существуют в стандартной библиотеке на нашей системе.
/* fgets: получает не более n символов из iop */ char *fgets(char *s, int n, FILE *iop) { register int c; register char *cs; cs = s; while (--n > 0 && (c = getc(iop)) != EOF) if ((*cs++ = c) == '\n') break; *cs = '\0'; return (c == EOF && cs == s) ? NULL : s; } /* fputs: посылает строку s в файл iop */ int fputs(char *s, FILE *iop) { int c; while (c = *s++) putc(c, iop); return ferror(iop) ? EOF : 0; }
Стандарт определяет, что функция ferror возвращает в случае ошибки ненулевое значение; fputs в случае ошибки возвращает EOF, в противном случае — неотрицательное значение.
С помощью функции fgets легко реализовать нашу функцию getline:
/* getline: читает строку, возвращает ее длину */ int getline(char *line, int max) { if (fgets(line, max, stdin) == NULL) return 0; else return strlen(line); }
Упражнение 7-6 |
Напишите программу, сравнивающую два файла и печатающую первую строку, в которой они различаются. |
Упражнение 7-7 |
Модифицируйте программу поиска по образцу из главы 5 таким образом, чтобы она брала текст из множества именованных файлов, а если имен файлов в аргументах нет, то из стандартного ввода. Будет ли печататься имя файла, в котором найдена подходящая строка? |
Упражнение 7-8 |
Напишите программу, печатающую несколько файлов. Каждый файл должен начинаться с новой страницы, предваряться заголовком и иметь свою нумерацию страниц. |
netlib.narod.ru | < Назад | Оглавление | Далее > |