& sb – *cout.rdbuf(): while (M
Автор admin Четверг, 14 мая 2009 11:32
& sb – *cout.rdbuf(): while (Mn.get(sb).eofO) { if (in.failO) // Обнаружена пустая строка in.clearO; cout « char(in.getO); // Обработка ‘\n’ } } ///:- Функция rdbuf() возвращает указатель, поэтому для получения объекта результат ее вызова необходимо разыменовать. Копирование потоковых буферов не предусмотрено (у них отсутствует копирующий конструктор), поэтому мы определяем sb как ссылку на потоковый буфер cout. Вызовы failQ и clear() необходимы на случай, если во входном файле присутствует пустая строка (в нашем примере она есть). Когда эта конкретная перегруженная версия get() встречает два символа перевода строки подряд (признак пустой строки), она устанавливает флаг failbit для входного потока. Мы должны сбросить этот флаг функцией clear(), чтобы продолжить чтение из потока. Второй вызов get() извлекает и воспроизводит каждый завершитель строки (помните, что функция get(), в отличие от getline(), не извлекает из потока символ-завершитель). Вряд ли вам придется часто использовать этот прием, но все равно полезно знать, что он существует. Поиск в потоках ввода-вывода У каждого потока имеется свое пред
Комментарии закрыты.
Последние комментарии