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 行,所以我将目标设置为那个。接下来,我遍历每一行直到目标时间,并检查我是否在目标行。如果是这样,然后cout线路。

但是,它并没有给我任何东西。对于一个有 22 行的文件,我得到以下输出:

14
the id:

有人可以指出我做错了什么或给我一些提示吗?谢谢!

4

1 回答 1

3

record流将在eof()调用之后,std::count()但代码从不检查返回值,std::getline()所以不知道它失败了:总是检查读取操作的返回值。这意味着str永远不会填充,因此在"thid id: "消息之后不会打印任何内容。

您需要重置流或重新打开它。

于 2012-10-08T08:34:25.773 回答