当我使用字符串流时,我的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;
}
为什么会这样?
答案 0 :(得分:7)
当你为每一行“创建并销毁”stringstream
时,它也会重置fail
状态。
您可以在将新内容添加到line.clear();
之前添加line
来解决此问题。