о istringstream и ››операторе

string str = "0.000 0.005 0.001";
istringstream s(str);
string sub;
while (s)
{
    s >> sub;
    cout << sub << endl;
}

Это мой код, я просто хочу вывести каждое число в str, но я получаю последнее число дважды. Я знаю, что есть много лучших способов реализовать это, но я хочу знать, что не так с этим кодом. Что-то не так с operator>>?


person 何向旋    schedule 25.11.2015    source источник
comment
Этот код не выводит каждое число дважды, он выводит только последнее число дважды.   -  person Adam    schedule 25.11.2015


Ответы (1)


Использовать

while (s >> sub)
{
    cout << sub << endl;
}

вместо. В вашем коде вы в конечном итоге «съедаете» конец потока, поэтому s >> sub терпит неудачу, а sub остается неизменным с последним хорошим чтением (т.е. последним числом), поэтому вы в конечном итоге отображаете его дважды.

Связанный: Почему iostream::eof внутри условия цикла считается неправильным ?

person vsoftco    schedule 25.11.2015