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

Zadanie domowe z cpp0x - obsługa strumienia wyjścia
Kooneer
  • Rejestracja:około 11 lat
  • Ostatnio:około 8 lat
  • Lokalizacja:Zabrze
  • Postów:47
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

Kopiuj
#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;
}
edytowany 2x, ostatnio: flowCRANE
MK
A gdzie pytanie?
Kooneer
Aaaaa, rzeczywiście. Godzina robi swoje. Już poprawiam.
MK
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:12
1

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

edytowany 1x, ostatnio: flowCRANE
Kooneer
  • Rejestracja:około 11 lat
  • Ostatnio:około 8 lat
  • Lokalizacja:Zabrze
  • Postów:47
0

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

Kopiuj
 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;
}
Majkello
  • Rejestracja:około 10 lat
  • Ostatnio:3 miesiące
  • Postów:7
0

Spróbuj wyczyścić przed wpisywaniem zmiennej.

edytowany 1x, ostatnio: Majkello
Zobacz pozostały 1 komentarz
Kooneer
Chodzi Ci o to, żeby funkcja Czysc(); była przed x_status = cin.good();? Spróbowałem i ciągle zwraca wartość "1".
Kooneer
Właśnie zrobiłem inaczej. Funkcja Czysc(); przed cout << "Podaj liczbe x: "; o to Ci chodziło? Bo wtedy działa dobrze :D
Majkello
O to chodziło :)
Kooneer
A możesz mi powiedzieć, czy jest duża różnica jeśli wyczyszczę przed wpisaniem zmiennej, a wyczyszczeniem po wpisaniu zmiennej?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.