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


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


sink – это массив, в который помещаются символы. size – это максимальное число символов, читаемых из потока istream. delimiter – это символ-ограничитель, при обнаружении которого чтение прекращается. Сам ограничитель не читается, а оставляется в потоке и будет прочитан следующим. Программисты часто забывают удалить его из потока перед вторым обращением к get(). Чтобы избежать этой ошибки, в показанной ниже программе мы воспользовались функцией-членом ignore()

класса istream. По умолчанию ограничителем является символ новой строки.

Символы читаются из потока, пока одно из следующих условий не окажется истинным. Как только это случится, в очередную позицию массива помещается двоичный нуль.

·         прочитано size-1

символов;

·         встретился конец файла;

·         встретился символ-ограничитель (еще раз напомним, что он остается в потоке и будет считан следующим).

Эта форма get()

возвращает объект istream, для которого была вызвана (функция-член gcount() позволяет узнать количество прочитанных символов). Вот простой пример ее применения:

#include <iostream>

 

int main()

{

           const int max_line = 1024;

           char line[ max_line ];

 

           while ( cin.get( line, max_line ))

           {

                  // читается не больше max_line - 1 символов,

                  // чтобы оставить место для нуля

                  int get_count = cin.gcount();

                  cout << "фактически прочитано символов: "

                       << get_count << endl;

 

                  // что-то сделать со строкой

 

                  // если встретился символ новой строки,

                  // удалить его, прежде чем приступать к чтению следующей

                  if ( get_count < max_line-1 )

              cin.ignore();

           }

}

Если на вход этой программы подать текст о юной Алисе Эмме, то результат будет выглядеть так:




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