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単語が 1 つしかない行を取得した後は更新されません。

これを説明してください。コードで正しい答えを求めたくないのですが、その理由を知りたいのです。

ありがとうございました。

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 に答える