-1
if(inputFile.is_open()){
        while(!inputFile.eof()){
            getline(inputFile, line);
            ss << line;
                while(ss){
                ss >> key;
                cout << key << " ";
                lineSet.insert(lineNumber);
                concordance[key] = lineSet;
            }
            lineNumber++;
        }   
    }

何らかの理由で、while ループが最初の繰り返しの後に追い出され、入力ファイルの最初の文のみが表示されます。残りのコードは正常に動作しますが、最初の反復後にファイルが終了したと考える理由がわかりません。

ありがとう

4

1 に答える 1

0

eofまず、を使用せずにファイルを読み取る必要があります

while( getline(inputFile, line) )
{
    // process the line
}

if上記も必要ないことに注意してください。

ss主な問題は、以前に定義したaであると仮定stringstreamすると、ロジックに由来します。

ss << line;
while(ss){
    // stuff
}

ここでのwhileループは、ss失敗した場合にのみ終了します。ssしかし、良い状態にリセットされることはありません。したがって、外側のループはファイルのすべての行を読み取りますが、最初の行の後のすべての行は出力を生成しません。

代わりに、毎回stringstreamをリセットする必要があります。

ss.clear();
ss.str(line);
while (ss) {
    // stuff
}
于 2014-12-01T23:25:43.673 に答える