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((to convert) フラグなど) が設定された場合は、単にループします。

代わりにこれを試してください:

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 に答える