2010-05-17 2 views

ответ

200

Обычно для «сброса» строкового потока вам необходимо как сбросить базовую последовательность в пустую строку с помощью str, так и очистить фреймы с ошибкой и eof с помощью clear.

parser.str(std::string()); 
parser.clear(); 

Обычно то, что происходит в том, что первый >> достигает конца строки и устанавливает бит EOF, хотя он успешно разбирает первый короткий. Операции над потоком после этого немедленно прекращаются, так как бит потока потока все еще установлен.

+0

Да, он устанавливает eof после того, как оператор >>() использовался, и иногда eof также может установить сбой. Спасибо –

+21

Лично я думаю, что 'parser.str (" ")' яснее, но это вопрос мнения. –

+4

Возможно, стоит отредактировать этот ответ, чтобы сначала поместить parser.clear(), поскольку другие методы добавления контента в поток (например, парсер << 5) не работают, если сначала не вызывается clear. –

Смежные вопросы