Использование eof в моей программе, а затем постоянно циклы Почему?

Возможный дубликат:
Почему iostream :: eof внутри условия цикла считается неправильным?

Вот моя программа, она компилируется и все, кроме цикла while с eof становится бесконечным
файл scores.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;

}

2

Решение

EOF — не единственный флаг сбоя. Если один из других (например, fail (для конвертации) флаг) устанавливается, тогда он просто зацикливается.

вместо этого попробуйте это:

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

Это идиоматический способ сделать это: оператор extractin возвращает ссылку на поток, поток оценивается как истина, если не установлены все биты сбоя.

РЕДАКТИРОВАТЬ: пока я здесь, обратите внимание на += operator и конструктор для ifstream,

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector