Zadanie domowe z cpp0x - obsługa strumienia wyjścia

0

Cześć, mam problem z zadaniem ze strony Cpp0x. Chodzi o te:
Napisz program, który wczyta trzy liczby rzeczywiste, a na końcu programu je wszystkie wypisze. Zadbaj o to, by bufor strumienia wejściowego był za każdym razem czyszczony. Wynik końcowy powinien również zawierać informacje czy wczytanie danej liczby się powiodło.

Chodzi o to, że mój kod nie działa jak powinien. Zawsze leci "1" po cin.good();, a powinno "0", jeśli wpiszemy literę.

Stąd: http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wejsciowego/12

#include <iostream>

using namespace std;

int Czysc()
{
    cin.clear();
    cin.sync();
}

int main()
{
    float a;
    float b;
    float c;

    cout << "Podaj liczbe a: ";
    cin >> a;
    Czysc();
    cout << "\nPodaj liczbe b: ";
    cin >> b;
    Czysc();
    cout << "\nPodaj liczbe c: ";
    cin >> c;
    Czysc();
    cout << "Liczba a to: " << a;
    cout << cin.good();
    cout << "\nLiczba b to: " << b;
    cout << cin.good();
    cout << "\nLiczba c to: " << c;
    cout << cin.good();
    return 0;
}
1

Sprawdzaj cin.good() po wczytaniu czegoś, nie po wczytaniu i wyczyszczeniu flag.

0

Zrobiłem coś takiego i działa. Da się tu coś poprawić?

 int main()
{
    float a;
    float b;
    float c;
    bool a_status;
    bool b_status;
    bool c_status;

    cout << "Podaj liczbe a: ";
    cin >> a;
    a_status = cin.good();
    Czysc();
    cout << "\nPodaj liczbe b: ";
    cin >> b;
    b_status = cin.good();
    Czysc();
    cout << "\nPodaj liczbe c: ";
    cin >> c;
    c_status = cin.good();
    Czysc();
    cout << "Liczba a to: " << a;
    cout << " Wczytano? " << a_status;
    cout << "\nLiczba b to: " << b;
    cout << " Wczytano? " << b_status;
    cout << "\nLiczba c to: " << c;
    cout << " Wczytano? " << c_status;
    return 0;
}
0

Spróbuj wyczyścić przed wpisywaniem zmiennej.

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