从文本文件读取 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中文网其他相关文章!