Praca domowa 15 zad. 1
Ostatnio zmodyfikowano 2016-07-14 16:16
mich2803 Temat założony przez niniejszego użytkownika |
Praca domowa 15 zad. 1 » 2016-07-13 15:11:13 Podczas proby wczytania litery do zmiennej liczba, wyskakuje komunikat o bledzie a zaraz poniżej komunikat, o wczytaniu do zmiennej liczby 0, bez możliwości ponownego wprowadzenia wartości zmiennej przez użytkownika. Proszę o pomoc. #include <iostream>
using namespace std;
int main() { int liczba; cout << "Program prosi uzytkownika o podanie liczby calkowitej." << endl; cout << "Jesli uzytkownik wprowadzi niepoprawne dane, program poprosi jeszcze raz o liczbe" << endl; do { cout << "Podaj liczbe: "; cin >> liczba; if( cin.fail() == true ) { cout << "Nieprawidlowe dane. Sprobuj jeszcze raz." << endl; cin.clear(); cin.sync(); } } while( cin.fail() == true ); cout << "Podales liczbe: " << liczba << endl; cout << "Koniec programu"; return 0; }
|
|
marcolo2307 |
» 2016-07-13 15:17:47 Najpierw sprawdź błąd, a dopiero potem czyść strumień. if( cin.fail() == true ) Nie musisz pisać wszędzie == true albo == false . Prawda jest w domyśle, np. bool b = true; if( b ) { } if( !b ) { }
|
|
mich2803 Temat założony przez niniejszego użytkownika |
» 2016-07-13 15:25:42 Edytowałem kod, jeszcze przed twoją odpowiedzią. Przedtem było: cin >> liczba; cin.clear(); cin.sync(); if( cin.fail() == true ) { cout << "Nieprawidlowe dane. Sprobuj jeszcze raz." << endl; }
Wtedy program dzialal również niepoprawnie, ponieważ nie wyswietlał komunikatu o nieprawidlowym wczytaniu danych a jedynie informowal o tym ze wczytano do zmiennej liczbe 0. |
|
marcolo2307 |
» 2016-07-13 15:37:30 Czyścisz strumień przed while, więc pętla się kończy. |
|
mich2803 Temat założony przez niniejszego użytkownika |
» 2016-07-13 15:40:42 Jeśli strumień zostanie wyczyszczony po pętli, wtedy while zapętla się na komunikacie o nieprawidlwo wprowadzonych danych. #include <iostream>
using namespace std;
int main() { int liczba; cout << "Program prosi uzytkownika o podanie liczby calkowitej." << endl; cout << "Jesli uzytkownik wprowadzi niepoprawne dane, program poprosi jeszcze raz o liczbe" << endl; do { cout << "Podaj liczbe: "; cin >> liczba; if( cin.fail() == true ) { cout << "Nieprawidlowe dane. Sprobuj jeszcze raz." << endl; } cin.clear(); cin.sync(); } while( cin.fail() == true ); cout << "Podales liczbe: " << liczba << endl; cout << "Koniec programu"; return 0; }
W tym wypadku program wyświetla komunikat o błędzie lecz nie ma możliwości ponownego wprowadzenia danych i program wyświetla komunikat o wprowadzeniu przez użytkownika liczby 0, co nie jest prawdą. Czyli jest tak samo jak opisałem w pierwszym poście. |
|
marcolo2307 |
» 2016-07-13 16:45:22 No to czyść strumień przed wprowadzeniem danych... |
|
mich2803 Temat założony przez niniejszego użytkownika |
» 2016-07-13 17:10:09 Wiem, że podanie gotowego kodu to nie jest najlepsza metoda nauki, ale w tym wypadku niezależnie gdzie umieszczę metody cin.clear() cin.sync() nie mam możliwości ponownego wprowadzenia danych, wiec może ktoś zdecyduje się podać poprawny kod do tego zadania. Korzystam z Codeblocks'a 16.1 windows 10. |
|
marcolo2307 |
» 2016-07-13 17:40:28 Wystarczy to wpisać tuż przed cin. |
|
« 1 » 2 |