Как очистить строку?

stringstream parser;

parser << 5;
short top = 0;
parser >> top;
parser.str(""); //HERE I'M RESETTING parser

parser << 6; //DOESN'T PUT 6 INTO parser
short bottom = 0;
parser >> bottom;

Почему он не работает?

Ответ 1

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

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

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