0

例如,我有以下代码:

#include <iostream>
#include <sstream>

using namespace std;
int main(){
    stringstream ss;
    string buffer,first_word;
    int i;
    for(i = 0; i < 4; i++){
        getline(cin,buffer);    // getting line
        ss.str(buffer);         // initializing the stream
        ss>>first_word;
        cout<<first_word<<endl;
        ss.str(string());       // cleaning stream
    }
    return 0;
}

使用此输入:

line one with spaces
line two with spaces
alone
line four with spaces

我期望的输出只是这些行的第一个单词,如下所示:

line
line
alone
line

但我得到了这个:

line
line
alone
alone

因此,stringstream在获得只有一个单词的行后不会更新。

请向我解释一下,我不想要代码的正确答案,我想知道为什么。

谢谢你。

4

1 回答 1

1

如果您费心检查流的状态,您将看到这一行:

    ss>>first_word;
    if (!ss.good()) std::cout << "problem." << std::endl;
    cout<<first_word<<endl;

确实输出“问题”。

    ss.str("");
    ss.clear();

修复问题。

于 2013-05-19T05:26:58.067 回答