Problem z czyszczeniem strumienia
Ostatnio zmodyfikowano 2014-11-18 15:17
mykosik Temat założony przez niniejszego użytkownika |
Problem z czyszczeniem strumienia » 2011-05-07 01:12:28 Witam W poniższym programiku , po jego odpaleniu, kiedy wybiorę np 1 wyświetla mi "jeden" , ale gdy później dam literę to wyświetla mi "jeden" .Oczywiście program kończy się bo flaga błędu jest utawiona.To samo dzieje się gdy najpierw wybiorę 2 , apotem jakąś literę .Dlaczego tak się dzieje?Proszę o pomoc! #include <iostream> using namespace std; int main() { int a; bool spraw; do { cout << "wypisz 1,2 lub 0" << endl; cin.clear(); cin.sync(); cin >> a; spraw = cin.good(); switch( a ) { case 1: cout << "jeden" << endl; break; case 2: cout << "dwa" << endl; break; case 0: cout << " zero" << endl; break; default: cout << "nic" << endl; break; } } while( spraw != 0 ); cout << "koniec"; return 0; }
|
|
dmx81 |
» 2011-05-07 01:48:11 dopisz przed switch do { if( cin.good() ) { switch { } } } while( spraw != 0 ) |
|
absflg |
» 2011-05-07 01:52:38 Na początek informuję, że kod wypadałoby umieścić w znacznikach kolorujących składnię.
Jest dokładnie tak jak jest: nawet jeżeli wystąpi błąd to i tak wejdzie w switcha, bo nie zrobiłeś nic co by temu zapobiegło. Najwyraźniej nie mając odpowiednich danych strumień zostawia zmienną 'a' bez zmian, czyli z wynikiem poprzedniego obiegu (lub wartością początkową w przypadku wystąpienia po pierwszym obiegu pętli). |
|
mykosik Temat założony przez niniejszego użytkownika |
» 2011-05-14 09:08:19 Dzięki , rzeczywiście jest to dobry sposób aby ominąć ten błąd, Pozdrawiam dmx81 i absflg |
|
darko202 |
» 2014-11-18 15:14:18 możesz też chyba czyścić strumień
cin. clear(); cin.sync(); |
|
Mateus. |
» 2014-11-18 15:17:15 @darko202 Co miał na celu twój post? |
|
« 1 » |