Zaprzestanie wczytywania liczb po podaniu litery

0

Witam, mam taki o to kod:

#include <iostream>
#include <cctype>
#include <array>
const int SIZE = 10;
int main() {
    using namespace std;
    array <double, SIZE> dotations;
    size_t i = 0;
    double sum = 0;
    double averrage = 0;
    cout << "Podaj dotacje" << endl;
    cin >> dotations.at(i);
    while(!isalpha(dotations.at(i))) {
        sum += dotations.at(i);
        ++i;
        if (i > (SIZE - 1))
            break;
        cin >> dotations.at(i);
    }
    averrage = sum;
    cout << "Srednia dotacji wynoi = " << averrage << endl;
    cout << "A to dotacje wieksze od sredniej: " << endl;
    for(int i = 0; i < dotations.size(); i++) {
        if(dotations.at(i) > averrage)
            cout << dotations.at(i) << endl;
    }
}

Program ma dodawać do kontenera array 10 dotacji typu double, a następnie wyliczac z nich srednia i wypisac ją, oraz te liczby, które są od średniej większe. Jeżeli podana zostanie litera alfabetu wtedy program ma przestać wczytywać liczby. Niestety tutaj program faktycznie nie wczytuje tych liczb, ale zmienna i wciąż się inkrementuje, aż do i = 10. W czym tkwi problem?

0

Rozwiązane. Wystarczyło skorzystać z zależności mówiącej, że cin >> zmienna zwraca true jeżeli odczyt się powiódł, i false w przeciwnym wypadku zamiast korzystać z biblioteki cctype :)

a więc poprawiony kod wygląda tak:

#include <iostream>
#include <array>
const int SIZE = 10;
int main() {
    using namespace std;
    array <double, SIZE> dotations;
    size_t i = 0;
    double sum = 0;
    double averrage = 0;
    cout << "Podaj dotacje" << endl;

    while(cin >> dotations.at(i)) {
        sum += dotations.at(i);
        ++i;
        if (i > (SIZE - 1))
            break;
    }
    averrage = sum/i;
    cout << "Srednia dotacji wynoi = " << averrage << endl;
    cout << "A to dotacje wieksze od sredniej: " << endl;
    for(int i = 0; i < dotations.size(); i++) {
        if(dotations.at(i) > averrage)
            cout << dotations.at(i) << endl;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1