如果line不是空格终止,则stringstream进入失败状态

时间:2014-12-06 16:55:35

标签: c++ stringstream

我试图通过逐行读取并使用stringstream解析每一行来解析文件。这是我的代码的简化版本

#include <sstream>
#include <fstream>
#include <iostream>

using namespace std;

int main() {
    fstream f("input.txt", ios::in);
    stringstream ss;
    string line;
    while (getline(f, line)) {
        cout << "Got line `" << line << "'" << endl;
        ss.str(line);
        string prefix;
        ss >> prefix;
        cout << "Prefix: " << prefix << endl;
    }
    return 0;
}

如果input.txt喜欢(↲用于表示换行符)

a b↲
c d↲
e f↲

一切都按建议工作,但适用于

等文件
a↲
c d↲
e f↲

stringstream在a↲行之后进入失败(不确定)状态。似乎stringstream期望该行被空格终止或类似。当然,我可以手动添加空格或换行符。无论如何,我没有在stringstream手册中找到有关此行为的任何信息。

所以我的问题是为什么会发生这种情况以及如何正确解决这个问题。

1 个答案:

答案 0 :(得分:2)

当只有要提取的标记时,行ss >> prefix到达EOF字符。您必须使用ss.clear()清除标记:

ss.clear();
ss.str(line);