С++ для начинающих



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


           while (cin.getline( inBuf, lineSize ))

           {

                  // сколько символов фактически прочитано

                  int readin = cin.gcount();

                  // статистика: счетчик строк, самая длинная строка

                  ++lcnt;

                  if ( readin > max )

              max = readin;

                  cout << "Строка #" << lcnt

                       << "\tПрочитано символов: " << readin << endl;

                  cout.write( inBuf, readin).put('\n').put('\n');

           }

           cout << "Всего прочитано строк: " << lcnt << endl;

           cout << "Самая длинная строка: " << max << endl;

}

Когда на вход было подано несколько фраз из романа Германа Мелвилла “Моби Дик”, программа напечатала следующее:

Строка #1 Прочитано символов: 45

Call me Ishmael.  Some years ago, never mind

Строка #2 Прочитано символов: 46

how long precisely, having little or no money

Строка #3 Прочитано символов: 48

in my purse, and nothing particular to interest

Строка #4 Прочитано символов: 51

me on shore, I thought I would sail about a little

Строка #5 Прочитано символов: 47

and see the watery part of the world.  It is a

Строка #6 Прочитано символов: 43

way I have of driving off the spleen, and

Строка #7 Прочитано символов: 28

regulating the circulation.

Всего прочитано строк: 7

Самая длинная строка: 51

Функция-член getline() класса istream поддерживает только ввод в массив символов. Однако в стандартной библиотеке есть обычная функция getline(), которая помещает символы в объект класса string:

getline( istream &is, string str, char delimiter );

Эта функция читает не более str::max_size()-1 символов. Если входная последовательность длиннее, то операция завершается неудачно и объект переводится в ошибочное состояние. В противном случае ввод прекращается, когда прочитан ограничитель (он удаляется из потока, но в строку не помещается) либо достигнут конец файла.




Содержание  Назад  Вперед