2

可能重复:
为什么循环条件内的 iostream::eof 被认为是错误的?

这是我编译的程序,除了带有 eof 的 while 循环之外的所有内容都变得无限,文件 score.dat 包含 20 个随机数的列表。为什么eof不起作用并使其不断循环???

#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

int main ()
{

  int x, sum = 0, count = 0;
  double answer;
  ifstream  y;

  y.open("scores.dat");
  while (!y.eof())
   {
     y >> x;
     sum = sum + x;
     count ++;
     cout << x << endl;
   }

  answer = sqrt (((pow(x, 2.0)) - ((1.0/count) * (pow(x, 2.0)))) / (count - 1.0));
  cout << answer;

}
4

1 回答 1

5

EOF 不是唯一的失败标志。如果其他之一(例如fail(转换)标志)被设置,那么它只会循环。

试试这个:

std::ifstream y("scores.dat");
while (y >> x) {
    sum += x;
    ++count;
    std::cout << x << std::endl;
}

这是执行此操作的惯用方法,extractin 运算符将引用返回给流,只要未设置所有失败位,流就会评估为 true。

编辑:虽然我在这里,但请+= operator注意ifstream.

于 2012-10-24T18:47:09.510 回答