gpt4 book ai didi

c++ - seekg() 函数失败

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:55 24 4
gpt4 key购买 nike

我正在尝试编写一些简单的代码来读取文本文件,但会读取第一行两次。我认为这会像这样简单

    std::ifstream file;
file.open("filename", std::ios_base::in);
std::string line;
std::getline(file, line);
// process line
file.seekg(0, ios::beg);

while (std::getline(file, line))
{
// process line
}

然而,seekg 一定会失败,因为第一行没有被处理两次。知道为什么吗?

请注意:这不是我面临的问题,而是它的简化版本,因此不必粘贴多个类代码和多​​个函数。真正的问题涉及将文件指针传递给多个类中的多个函数。第一个函数可能会或可能不会被调用并读取文件的第一行。第二个函数读取整个文件,但必须首先调用 seekg 以确保我们位于文件的开头。

我只是使用上面的代码来简化讨论。

最佳答案

与其回到开头并阅读第一行两次,我想我会用这样的方式来处理事情:

std::ifstream file("filename");

std::string line;

std::getline(file, line);
process(line);

do {
process(line);
} while (getline(file, line));

目前,这假定 process 不会修改 line(但如果需要,可以很容易地为第一次调用制作一个额外的拷贝) .

编辑:鉴于编辑后的答案中的修改要求,听起来确实需要搜索。在这种情况下,在继续之前清除流可能是最干净的:

std::getline(file, line);
process1(line);

file.seekg(0);
file.clear();

process2(file);

关于c++ - seekg() 函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11264764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com