Язык программирования C++. Вводный курс


Дополнительные операторы ввода/вывода - часть 2


when the wind blows through her hair, it looks almost alive,

like a fiery bird in flight. A beautiful fiery bird, he tells her,

magical but untamed. "Daddy, shush, there is no such creature,"

she tells him, at the same time wanting him to tell her more.

Shyly, she asks, "I mean, Daddy, is there?"

наша статистика:

       пробелов: 59      символов новой строки: 6     табуляций: 0

       точек: 4          запятых: 12

·         вторая форма get()

также читает из входного потока по одному символу, но возвращает не поток istream, а значение прочитанного символа. Тип возвращаемого значения равен int, а не char, поскольку необходимо возвращать еще и признак конца файла, который обычно равен -1, чтобы отличаться от кодов реальных символов. Для проверки на конец файла мы сравниваем полученное значение с константой EOF, определенной в заголовочном файле iostream. Переменная, в которой сохраняется значение, возвращенное get(), должна быть объявлена как int, чтобы в ней можно было представить не только код любого символа, но и EOF:

#include <iostream>

 

int main()

{

           int ch;

 

           // альтернатива:

     // while ( ch = cin.get() && ch != EOF )

           while (( ch = cin.get()) != EOF )

              cout.put( ch );

 

           return 0;

}

При использовании любой из этих форм get() для чтения данной последовательности нужно семь итераций:

 

a b c

d

Читаются следующие символы: ('a', пробел, 'b', пробел, 'c', символ новой строки, 'd'). На восьмой итерации читается EOF. Оператор ввода (>>) по умолчанию пропускает пустые символы, поэтому на ту же последовательность потребуется четыре итерации, на которых возвращаются символы: 'a', 'b', 'c', 'd'. А вот следующая форма get()

может прочесть всю последовательность всего за две итерации;

·         сигнатура третьей формы get()

такова:

get(char *sink, streamsize size, char delimiter='\n')




Начало  Назад  Вперед