【问题标题】:Does eof() look at lines or data? C++eof() 是否查看行或数据? C++
【发布时间】:2025-12-03 05:30:01
【问题描述】:

假设我正在尝试从名为 input.txt 的文件中逐行读取数据。大约有 20 行,每行包含 3 种不同的数据类型。如果我使用此代码:

while(!file.eof){ ..... }

这个函数是每次迭代只查看每一行的一种数据类型,还是每次迭代都一次查看每一行的所有数据类型——所以下一次迭代将查看下一行而不是下一个数据类型?

非常感谢。

【问题讨论】:

  • 你忘记了括号:while (!file.eof())

标签: eof getline


【解决方案1】:

.eof() 查看文件结束标志。 您在文件末尾运行后设置该标志。这是不可取的。

可以在here 找到有关其工作原理和最佳实践的精彩博文。

基本上,使用

std::string line;
while(getline(file, line)) { ... }

while (file >> some_data) { ... }

因为它会在正确的时间注意到错误和文件的结尾并采取相应的行动。

【讨论】:

  • 非常感谢。使用“file >> some_data”,>> 运算符是否会在调用后从同一行顺序读取数据,或者无论它位于哪一行,它是否总是从文件中的同一位置开始?谢谢。
  • 大多数文件代码读取文件并通过它前进。通常使用peek 命令查看但不移动文件。