Обработка ошибок потока ввода из файла

Написал код считывающий числа из файла и вычисляющий по ним интеграл методом правых прямоугольников. По условию задачи в файле могут находиться неверные данные/неотсортированные данные, я попытался сделать проверку на наличие букв в потоке ввода и ничего не вышло. Программа вместо того что бы дальше читать числа, считывает нули. Почему это не работает?? Поток должен входить в состояние отказа, после необходимо это состояние сбросить но как я ни пытался сделать это, всё равно выходило одно и то же, что делать?

#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-ов сколько угодно можно ставить он просто всё игнорирует,это код блокс)).

Ответы (0 шт):