Моя 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;
}
Почему это происходит?
Когда вы «создаете и разрушаете» stringstream
для каждой строки он также получает fail
сброс состояния.
Вы можете исправить это, добавив line.clear();
перед добавлением нового контента в line
,
Других решений пока нет …