Rozdział 15 - prośba o sprawdzenie zadania w ppkt. 1
Ostatnio zmodyfikowano 2018-11-05 18:32
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: #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). |
|
pekfos |
» 2018-11-04 16:59:01 Program przyjmie 0 jako poprawną liczbę tylko wtedy, jeśli podasz ją za pierwszym razem. |
|
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: #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; }
|
|
pekfos |
» 2018-11-05 18:32:21 Teraz podając liczbę za drugim razem, wartość 1 jest uznawana za niepoprawną. Obsługa strumienia wejściowegoTu 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(). |
|
« 1 » |