странный обзор в cpp

Моя cpp-программа делает что-то странное с областью видимости, когда я использую ее как строковые потоки. Когда я помещаю инициализацию строк и потоков строк в тот же блок, где я его использую, проблем не возникает. Но если поместить его на один блок выше, поток строк не выводит строки правильно

правильное поведение, программа печатает каждый токен через пробел:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main () {

while (true){
//SAME BLOCK
stringstream line;
string commentOrLine;
string almostToken;
getline(cin,commentOrLine);
if (!cin.good()) {
break;
}
line << commentOrLine;
do{

line >> almostToken;
cout << almostToken << " ";
} while (line);
cout << endl;
}
return 0;
}

Неправильное поведение, программа печатает только первую строку ввода:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main () {
//DIFFERENT BLOCK
stringstream line;
string commentOrLine;
string almostToken;
while (true){
getline(cin,commentOrLine);
if (!cin.good()) {
break;
}
line << commentOrLine;
do{

line >> almostToken;
cout << almostToken << " ";
} while (line);
cout << endl;
}
return 0;
}

Почему это происходит?

3

Решение

Когда вы «создаете и разрушаете» stringstream для каждой строки он также получает fail сброс состояния.

Вы можете исправить это, добавив line.clear(); перед добавлением нового контента в line,

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]