Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
stdio_ВАНЯ.rtf
Скачиваний:
5
Добавлен:
20.07.2019
Размер:
588.72 Кб
Скачать

Int fputs(const char* string, file* stream);

Аргумент string адресует строку символов, которую необходимо записать в поток вывода, специфицированный указателем stream. Завершающий строку нулевой код '\0' не будет записан в поток.

Для записи строки в поток стандартного вывода следует применять функцию puts. Спецификация формата ее вызова имеет вид:

Int puts(const char* string);

Аргумент string адресует строку символов, которую необходимо записать в поток стандартного вывода. Завершающий строку символов нулевой код '\0' при записи в поток стандартного вывода автоматически заменяется на символ перевода строки.

При успешном завершении операции записи строки символов функции fputs и puts возвращают неотрицательное целочисленное значение. В случае ошибки их код возврата равен значению константы EOF. Анализ кода возврата позволяет контролировать результат выполнения операции записи строки в поток вывода. Следует отметить, что при разработке практических приложений контроль записи редко бывает необходим, особенно, при обработке потока стандартного вывода.

Использование функций ввода-вывода потоков строк символов иллюстрирует исходный код упрощенной функциональной реализации прикладной команды fold из OS Linux, которая "изгибает" длинные текстовые строки потока ввода для вывода на стандартный экран терминала без потери информации. Ширина экрана в стандартном консольном режиме равна 80 позиций, поэтому длина строки вывода не может превышать 80 байт, а остаток более длинной входной строки должен быть перенесен в следующий ряд экранных позиций. Короткие строки должны отображаться без изменений. Указанный принцип обработки длинных строк обеспечивает последовательный вызов функций fgets и puts в сочетании с анализом длины каждой полученной строки потока ввода, как показывает исходный код прикладной процедуры fwrap, приведенный ниже.

/* Ограничитель экранного вывода длинных строк */

void fwrap(FILE* input) {

char buf[80]; /* ряд позиций строки потока ввод */

int i; /* индекс ряда строки ввода */

while(fgets(buf, 80, input) != NULL) {

for(i = 0; buf[i] != '\0'; i++);

if(buf[--i] == '\n')

buf[i] = '\0';

puts(row);

} /* while */

} /* fwrap */

Для чтения из потока ввода структур данных произвольных типов следует использовать функцию fread. Спецификация формата ее вызова имеет вид:

Int fread(void* ptr, int size, int num, file* stream);

Каждое обращение к функции fread считывает из потока ввода, заданного указателем stream, не более, чем num элементов данных любого базового или абстрактного типа. Размер каждого элемента данных задает аргумент size. Для сохранения полученных данных следует предусмотреть соответствующий объем памяти, который адресует указатель ptr. Функция fread возвращает число реально прочитанных элементов данных, которое может быть меньше значения аргумента num только в случае ошибки или при достижении конца потока ввода.

Для записи в поток вывода структур данных произвольных типов следует использовать функцию fwrite. Спецификация формата ее вызова имеет вид:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]