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

Problem z czyszczeniem strumienia

Ostatnio zmodyfikowano 2014-11-18 15:17
Autor Wiadomość
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!

 
C/C++
#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;
}
P-32765
dmx81
» 2011-05-07 01:48:11
dopisz przed
switch
C/C++
do
{
    if( cin.good() ) // <= o tutaj - czyli jesli ok, to wykona sie instrukcja switch, jesli blad, to ominie i wyjdzie z petli
    {
        switch //...
        {
            //...
        }
    }
}
while( spraw != 0 )
P-32766
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).
P-32767
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
P-33019
darko202
» 2014-11-18 15:14:18
możesz też chyba czyścić strumień

cin. clear();
cin.sync();
P-120950
Mateus.
» 2014-11-18 15:17:15
@darko202
Co miał na celu twój post?
P-120951
« 1 »
  Strona 1 z 1