Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Theinnersea

Frischling

  • »Theinnersea« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Böblingen

Beruf: Zahntechniker

  • Private Nachricht senden

1

15.07.2011, 10:00

Problem mit cin.clear() !!

Hi Leute hab ein kleines Problem und zwar bekomm ich den Eingabestream nicht gelöscht. Es soll eine Zahl eingegeben werden und bei Eingabe von einem Zeichen soll an den Anfang des Menües zurückgesprungen werden und die Eingabe von neuem beghinnen, doc irgenwie geht er dann in eine Endlosschleife.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
bool run = true;
short menue;

void Partial_Menue();
void Auftrieb_Menue();

int main()
{   
    short menueLength = 3;  

    while(run)
    {
        system("cls");
        menue = 0; 

        cout<<"\t\t\t\t Dive-o-Mat\n\n"<<endl;
        cout<<"1. Partialdruck für Pressluft oder Gasgemische berechnen"<<endl;
        cout<<"2. Auftrieb und Wasserverdrängung berechnen"<<endl<<endl;
        cout<<"3.~~~~~~~~~~~~~~~Programm beenden ~~~~~~~~~~\n\n";       
        
        if(!(cin>>menue))
        { //!!!!!!  HIER SPRINGT ER REIN SOBALD EIN CHAR EINGEGEBEN WURDE!!? WAS MACHE ICH FALSCH???
            cout<<"Bitte eine Zahl eingeben"<<endl; 
                        cin.clear();                           
            system("pause");
            continue;
        }
        else if(menue > menueLength)
        {
            cout<<"Bitte nochmal :)"<<endl;
            system("pause");
            continue;
        }

//Starten der Verzweigungen 
        switch(menue)
        {
        case 1://Partialdruck....
            {
                //Partial_Menue();
            }break;
        case 2://Auftrieb...
            {
                //Auftrieb_Menue();
            }break;
        case 3:
            {
                cout<<"\t\t\t Bye Bye\n\n"<<endl;
                run = false;
                system("pause");
            }break;
        }//switch
    
    }//while        
    
    return 0;
}


Hat jemand ne Idee??
Danke & Grüßle

2

15.07.2011, 10:15

Zeile 33: was denkst du was bei continue passiert? Das gibts eigentlich nur in einer Schleife. Ein if ist keine Schleife.

ich würde da sowas machen wie

C-/C++-Quelltext

1
2
3
4
5
6
do {
cout<<"Bitte Zahl eingeben:"<<endl;
menue=0;
cin.clear();
cin>>menue;
}while(menue==0);


das danach hab ich mir nicht angeguckt.

btw hab ich ne neue sig.

/edit: code tags

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

3

15.07.2011, 10:18

Das Zeichen ist immer noch im stream. clear() löscht nur die Fehlerflags. Stelle dahinter noch ein

C-/C++-Quelltext

1
cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
(erfordert eventuel ein #include <limits>).
Siehe auch http://www.cplusplus.com/reference/iostream/ios/clear/ und http://www.cplusplus.com/reference/iostream/istream/ignore/

EDIT: @dennis-.-: Die Schleife ist while(run).

Theinnersea

Frischling

  • »Theinnersea« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Böblingen

Beruf: Zahntechniker

  • Private Nachricht senden

4

15.07.2011, 10:45

Dickes Thx an Oberon :D !!
Funktioniert wunderbar auch ohne

C-/C++-Quelltext

1
#include<limits> 

Have a nice day :!:

Werbeanzeige