Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 15 - prośba o sprawdzenie zadania w ppkt. 1

Ostatnio zmodyfikowano 2018-11-05 18:32
Autor Wiadomość
rottingham
Temat założony przez niniejszego użytkownika
Rozdział 15 - prośba o sprawdzenie zadania w ppkt. 1
» 2018-11-04 16:40:58
Cześć! Mam prośbę o sprawdzenie czy poprawnie wykonałem pierwsze zadanie w r. 15.

Treść zadania:
Napisz program, który wczyta liczbę, a następnie wypisze ją na ekranie. Zabezpiecz przed wczytaniem nieprawidłowej liczby. Wykorzystaj do tego celu wiedzę z jednego z poprzednich rozdziałów. Sposób działania programu:
1. Podaj liczbę
2. Jeżeli błąd, wróć do kroku 1.
3. Wypisz liczbę, która została podana.

Mój kod:
C/C++
#include <iostream>
#include <limits>
using namespace std;

int main()
{
    int a;
    cout << "Podaj liczbe " << endl;
    cin >> a;
    bool aCzyBlad = cin.good();
    if( aCzyBlad == false )
    {
        do
        {
            cout << "\nPodales zla liczbe.\nPodaj poprawna liczbe" << endl;
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            cin >> a;
        } while( a == 0 );
       
        cout << "Twoja liczba to " << a << endl;
    }
    else
         cout << "Podales dobra liczbe.\nTwoja liczba to " << a << endl;
   
    return 0;
}

Czy kod jest zrobiony dobrze?
Jeżeli nie, to proszę o wskazówki gdzie tkwi błąd.
Jeżeli jest zrobiony dobrze, to czy na tym etapie kursu da się zrobić lepiej? (prosiłbym również o ewentualne wskazówki jak zrobić to lepiej).
P-172746
pekfos
» 2018-11-04 16:59:01
Program przyjmie 0 jako poprawną liczbę tylko wtedy, jeśli podasz ją za pierwszym razem.
P-172747
rottingham
Temat założony przez niniejszego użytkownika
» 2018-11-05 15:45:42
Dzięki za pomoc. Rozumiem w czym był błąd, naprawiłem to i działa. Ale nie rozumiem do końca co zrobiłem.
Warunek w while zmieniłem na
while( a == cin.good() )

Wcześniej zastosowałem zmienną
bool aCzyBlad = cin.good();

Czym jest dokładnie funkcja cin.good?
Dlaczego po wrzuceniu tej funkcji program działa?
I dlaczego działa bez względu czy zmienię z "good" na "bad"?

Zrobiłem to na czuja, w kursie do tej pory nie było opisu funkcji cin.good ani cin.bad. Nie rozumiem do końca zrobiłem, prosiłbym o pomoc. Pozdrawiam!

Cały kod:

C/C++
#include <iostream>
#include <limits>
using namespace std;

int main()
{
    int a;
    cout << "Podaj liczbe " << endl;
    cin >> a;
    bool aCzyBlad = cin.good();
    if( aCzyBlad == false )
    {
        do
        {
            cout << "\nPodales zla liczbe.\nPodaj poprawna liczbe" << endl;
           
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            cin >> a;
        } while( a == cin.good() );
       
        cout << "Twoja liczba to " << a << endl;
    }
    else
         cout << "Podales dobra liczbe.\nTwoja liczba to " << a << endl;
   
    return 0;
}
P-172754
pekfos
» 2018-11-05 18:32:21
Teraz podając liczbę za drugim razem, wartość 1 jest uznawana za niepoprawną.
» Kurs C++ » Poziom 1Obsługa strumienia wejściowego lekcja
Tu masz podany fragment kodu w sam raz do zapętlenia w do..while. Gdyby nie widoczność zmiennych, byłoby to Ctrl+C, Ctrl+V.

w kursie do tej pory nie było opisu funkcji cin.good ani cin.bad.
Zostały celowo przemilczane na rzecz cin.fail().
P-172755
« 1 »
  Strona 1 z 1