Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Ввод-вывод строк






     

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

     






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.