Обработка ошибок потока ввода из файла
Написал код считывающий числа из файла и вычисляющий по ним интеграл методом правых прямоугольников. По условию задачи в файле могут находиться неверные данные/неотсортированные данные, я попытался сделать проверку на наличие букв в потоке ввода и ничего не вышло. Программа вместо того что бы дальше читать числа, считывает нули. Почему это не работает?? Поток должен входить в состояние отказа, после необходимо это состояние сбросить но как я ни пытался сделать это, всё равно выходило одно и то же, что делать?
#include <fstream>
#include <cmath>
#include <conio.h>
using namespace std;
int main()
{
ifstream fin;
float x[1000];
float y[1000];
float s=0;
float temp;
int i=0;
int n;
cout.precision (5);
fin.open("data.txt");
//проверка открытия файла
if (!fin)
{
cout << "error in opening file";
return 1;
}
cout << "Input number of dots:";
cin >> n;
//чтение из потока и проверка(?) на ошибки
while( fin >> x[i] >> y[i] )
{
if (fin.fail())
cout << "dfasfdasdsafadsadfdfdsfasdfsd"; //не работает
cout << " x["<<i<<"]="<< x[i]<< " y["<<i<<"]="<< y[i]<< endl;
i++;
if ((fin.eof()==1)||(i>=n))
break;
}
//пузырьковая сортироквка
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (x[j] > x[j + 1])
{
// меняем элементы местами
temp = x[j];
x[j] = x[j + 1];
x[j + 1] = temp;
temp = y[j];
y[j] = y[j + 1];
y[j + 1] = temp;
}
}
}
//обработка данных
for (i=0;i<=n;i++)
{
if (i>=1)
s=s+((x[i]-x[i-1])*fabs(y[i]));
else
s=s+(x[i]*fabs(y[i]));
cout <<"s["<<i<<"]="<< s <<endl;
}
cout << s;
return 0;
}``
Данные у меня были такие
2 3
5 6basdfasdfasdfasdf
3 5
4 6
вывод
Input number of dots:3
x[0]=2 y[0]=3
x[1]=5 y[1]=6
s[0]=0
s[1]=0
s[2]=6
s[3]=24
На мой дебагер лучше не надеяться - при запуске он просто прогоняет программу и выключается (да breakpoint-ов сколько угодно можно ставить он просто всё игнорирует,это код блокс)).