Символы читаются из потока, пока
Символы читаются из потока, пока одно из следующих условий не окажется истинным. Как только это случится, в очередную позицию массива помещается двоичный нуль.
- прочитано 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();
}
}
Если на вход этой программы подать текст о юной Алисе Эмме, то результат будет выглядеть так:
фактически прочитано символов: 52
фактически прочитано символов: 60
фактически прочитано символов: 66
фактически прочитано символов: 63
фактически прочитано символов: 61
фактически прочитано символов: 43
Чтобы еще раз протестировать поведение программы, мы создали строку, содержащую больше max_line символов, и поместили ее в начало текста. Получили:
фактически прочитано символов: 1023
фактически прочитано символов: 528
фактически прочитано символов: 52
фактически прочитано символов: 60
фактически прочитано символов: 66
фактически прочитано символов: 63
фактически прочитано символов: 61
фактически прочитано символов: 43
По умолчанию ignore() читает и удаляет один символ из потока, для которого вызвана, но можно и явно задать ограничитель и количество пропускаемых символов. В общем виде ее сигнатура такова:
Содержание Назад Вперед