c++ - ifstream eof 循环读入条件表达式中的变量?

标签 c++ loops ifstream eof

第一学期的 C++ 作业,这是我在其中遇到的麻烦:

基本上有一个 txt 文件,每一行都有三个数字 - 循环将这些读入三个变量,并使用它们创建一个对象并对其进行处理。我们必须使用三种不同的循环技术来做到这一点。前两个是使用基于计数器的 for 循环和基于标记值的 while 循环完成的,对我来说很简单。

虽然最后一个说“写一个文件循环的结尾,在条件表达式中从 fin 读取一个整数到 x”。 (fin 是 ifstream 对象)

这样的东西有用吗?

while (fin >> x && !fin.eof())
{
rest of loop stuff
}

在循环的条件表达式中读入变量对我来说真的很奇怪。这样做不是更有意义吗?

while (!fin.eof())
{
fin >> x;
rest of loop stuff
}

谢谢,感谢任何指导!

最佳答案

总是希望在读取值之后检查您的输入是否成功!您通常不想使用 eof() 来控制输入循环:这是要检查的错误条件。

例如,您发布的两个代码示例出了什么问题:

  1. 您的第一个循环 (while (fin >> x && !fin.eof())) 如果最后一个值后面没有换行符,则不会处理它。尽管这在文件中很少发生,但在从字符串流 (std::istringstream) 中读取时确实经常发生。
  2. 您的第二个循环可能会处理最后一行两次:在读取最后一个值之后,读取很有可能会在最后一个换行符处停止,但在尝试读取文件之外之前:eof() 将为false,读取失败,值不变,你处理两次。

规范的输入循环总是基本上是这样的:

while (in >> values) {
    <process-data-here>
}

读取值的准确方式有一些变化,例如,它也可以使用 std::getline(in, line),但它总是读取值并验证流未处于故障状态。

关于c++ - ifstream eof 循环读入条件表达式中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20026835/

相关文章:

c++ - 使用 ifstream while 循环,如何显示输入错误并在下一行继续?

c++ - 故意返回 NaN

C++ 动态数组 "losing"数据

ios - swift for 循环没有循环足够的次数

python - Python的N个嵌套for循环

C++ 转换文件流函数以使用字符串流

c++ - 64 位移植 c++ - 跟踪基本类型、指针、算术的使用

c++ - 是否有 "simple"方法让 ld 输出 demangle 函数名称?

r - 为什么循环的执行时间与循环的大小不成正比

c++ - 从文件中读取第 11 列数字并取平均值?(c++)