首页 >后端开发 >C++ >为什么我的 C 代码在检查 EOF 时会读取文本文件的最后一行两次?

为什么我的 C 代码在检查 EOF 时会读取文本文件的最后一行两次?

Barbara Streisand
Barbara Streisand原创
2024-12-27 15:20:15948浏览

Why Does My C   Code Read the Last Line of a Text File Twice When Checking for EOF?

从文本文件读取 EOF 时的故障排除

从文本文件读取直到到达文件结尾 (EOF) 时,这一点很重要了解输入流的行为以避免重复行。

在 C 中,ifstream对象用于读取文本文件。提供的代码说明了从文本文件读取整数的常见方法,但遇到了最后一行被读取两次的问题。

理解问题

出现问题的原因是 eof() 函数根据流的内部指针检查 EOF,当到达 EOF 时,该指针位于文件的最后一个字符之后。代码在遇到整数时读取最后一行一次,并在循环内检查 EOF 时再次读取最后一行。

解决方案

要解决此问题,建议检查for EOF 在读取循环内的整数之前。这确保了最后一个整数只被读取一次:

while (!iFile.eof())
{
    if (iFile.peek() != EOF)
    {
        int x;
        iFile >> x;
        cerr << x << endl;
    }
}

这里,iFile.peek() 检查流中的下一个字符而不实际读取它。如果不是 EOF,则读取并输出整数。

替代方法

此外,可以使用 getline 函数重写代码以从文件,然后手动解析整数。这种方法完全避免了 EOF 问题:

ifstream iFile("input.txt");

while (getline(iFile, line))
{
    istringstream ss(line);
    int x;
    ss >> x;
    cerr << x << endl;
}

以上是为什么我的 C 代码在检查 EOF 时会读取文本文件的最后一行两次?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn