Problem z cin.good() i cin.fail().
Ostatnio zmodyfikowano 2016-11-16 17:18
Dejmon Temat założony przez niniejszego użytkownika |
Problem z cin.good() i cin.fail(). » 2016-11-15 22:40:07 Witam. Uczę się języka C++ od około miesiąca. Aktualnie jestem na lekcji 17 kursu C++, lecz nadal nie udało mi się zrozumieć jednej rzeczy. Próbowałem zabezpieczyć kod programu przed wprowadzeniem niewłaściwych danych, ale nie ważne co poda użytkownik, program leci dalej zupełnie ignorując pętlę do...while. Program prezentuje się tak: #include <iostream> using namespace std;
int wczytajLiczbe() { int a; bool sukces; do { cin >> a; cin.clear(); cin.sync(); sukces = cin.good(); } while( sukces != true ); return a; }
int main() { cout << "Podaj liczbe: "; int liczba = wczytajLiczbe(); cout << "Podales liczbe: " << liczba << endl; return 0; }
Proszę o pomoc. |
|
carlosmay |
» 2016-11-15 23:01:11 cin >> a;
cin.clear(); cin.sync();
sukces = cin.good(); |
Niewłaściwa kolejność. Wczytaj liczbę, sprawdź stan strumienia i dopiero go czyść. |
|
Dejmon Temat założony przez niniejszego użytkownika |
» 2016-11-15 23:49:42 Dziękuję za pomoc, ale nie rozwiązało to mojego problemu. Program działa tak samo jak przedtem. |
|
carlosmay |
» 2016-11-16 05:20:41 Pokaż kod. |
|
Dejmon Temat założony przez niniejszego użytkownika |
» 2016-11-16 16:06:52 Kod aktualnie wygląda tak: #include <iostream> using namespace std;
int wczytajLiczbe() { int a; bool sukces; do { cin.clear(); cin.sync(); cin >> a; sukces = cin.good(); } while( sukces != true ); return a; }
int main() { cout << "Podaj liczbe: "; int liczba = wczytajLiczbe(); cout << "Podales liczbe: " << liczba << endl; return 0; }
|
|
karambaHZP |
» 2016-11-16 16:27:54 nie rozwiązało to mojego problemu. Program działa tak samo jak przedtem. |
A przebudowałeś projekt? Jeśli nie to uruchamiasz starą kompilację. |
|
michal11 |
» 2016-11-16 16:30:57 Wczytaj liczbę, sprawdź stan strumienia i dopiero go czyść. |
a u ciebie jest czyść strumień, wczytaj liczbę, sprawdź stan strumienia. |
|
Dejmon Temat założony przez niniejszego użytkownika |
» 2016-11-16 17:18:06 Dzięki wszystkim za pomoc. W prawdzie osiągnąłem to co chciałem, poprawiłem niektóre rzeczy i program działa prawie prawidłowo, ale nadal nie rozumiem dlaczego cin.good() przepuszcza liczby z przecinkami dla typu danych int. Kod wygląda teraz tak: #include <iostream> using namespace std;
int wczytajLiczbe() { float a; bool sukces; do { cout << "Podaj liczbe: "; cin >> a; sukces = cin.good(); cin.clear(); cin.sync(); } while( sukces != true ); return a; }
int main() { float liczba = wczytajLiczbe(); cout << "Podales liczbe: " << liczba << endl; return 0; }
|
|
« 1 » |