使用 fstream 进行文件输入操作通常涉及检查流的状态以确定何时停止阅读。但是,使用某些状态标志可能会导致意外问题,例如读取最后一行两次。本文探讨了根本原因并提供了避免此问题的解决方案。
为什么最后一行被读取两次
使用 good() 或 ! 时会出现此问题。使用 getline() 从文件中读取行的 while 循环内的 eof() 条件。发生这种情况的原因如下:
修复: 使用 getline() 的返回值以检查是否成功读取行:
while (getline(stream, line)) { // Use line here. }
修复:检查 getline() 操作是否为在检查 EOF 之前成功:
if (getline(stream, line)) { // Use line here. } else if (stream.eof()) { // Handle end-of-file condition. } else { // Handle error condition. }
最佳实践
要避免这些问题并有效处理文件行,请考虑以下事项:
if (stream >> foo >> bar) { // Use foo and bar here. } else { // Handle error condition. }
for (string line; getline(stream, line);) { // Use line here. }
通过遵循这些准则,您可以避免无意中读取最后一行两次,并确保可靠的文件输入处理fstream。
以上是在 C 中使用'fstream”时如何防止两次读取最后一行?的详细内容。更多信息请关注PHP中文网其他相关文章!