0

だから、私が読みたいファイルの特定の行を見つけましたが、私が持っているものは機能していません:

    string str;
int target = 0;
ifstream record;

record.open("Record.txt");
target = std::count(std::istreambuf_iterator<char>(record), std::istreambuf_iterator<char>(), '\n') - 8;
cout << target << endl;

for(int lineNum = 0; lineNum <= target; lineNum++)
{
    getline(record, str);
    if(lineNum == target)
    {
        cout <<"the id: "<< str << endl;
    }
}

上記では、 std::count を使用してファイルの行数をカウントしています。私は常に下から 8 行目を読みたいと思っているので、それをターゲットに設定しました。次に、各ラインを目標時間までループし、目標ラインにいるかどうかを確認します。もしそうなら、行を数えます。

しかし、それは私に何も与えていません。22 行のファイルの場合、次の出力が得られます。

14
the id:

誰かが私が間違っていることを指摘したり、ヒントを教えてもらえますか? ありがとう!

4

1 に答える 1

3

recordストリームは呼び出しのeof()後になりstd::count()ますが、コードはの戻り値をチェックしないstd::getline()ため、失敗していることに気づきません。常に読み取り操作の戻り値をチェックしてください。これは、strデータが入力されないため、メッセージの後に何も出力されないことを意味し"thid id: "ます。

ストリームをリセットするか、再度開く必要があります。

于 2012-10-08T08:34:25.773 に答える