2017-09-22 2 views
-4

Hallo dies ist meine zweite Frage für die gleiche C++ Programm (sorry, wenn dies eine einfache Frage ist)Diese Schleife wird beendet, obwohl die Bedingung immer noch erfüllt ist.

ich eine Schleife zu verwenden, ich versuche zu überprüfen, ob eine Eingabe gültig war. Diese Schleife scheint jedoch nicht zu respektieren, ob die Eingabe gültig war oder nicht.

int b(-1); 
check = false; 
while (b < 1 || b > 12) 
{ 
    if (check) 
     std::cout<<"Sorry try again!\nMonth: "; 
    std::cin>>b; 
    check = true; 
{ 

Wenn der Benutzer einen Wert zwischen 1 und 12 eingibt. Andernfalls mit der Schleife fortfahren.

Allerdings, wenn ich das Programm ausführen und einen ungültigen Eingang eingeben, geht es weiter.

Year: 2017 
Month *In number format*: 20 
Day: 

Sogar -1 funktioniert nicht und das ist seltsam, weil ich den Wert als -1 setze, bevor die Schleife beginnt.

Year: 2017 
Month *In number format*: -1 
Day: 

Ist es die Verwendung der oder Anweisung mit weniger als und größer als?

+0

Bitte geben Sie den vollständigen Code-Schnipsel –

+1

leid, dass ich die falsche geschweifte Klammer falsch gesetzt. – amgtree

+0

korrigieren Sie es, indem Sie Ihre Frage erneut aktualisieren .. –

Antwort

1

Wenn Sie eine ungültige Eingabe eingeben, wird das Fehlerbit des Streams gesetzt. In diesem Fall wird die Zielvariable (b) nicht geändert und solange Sie das Bit nicht löschen, wird auch jeder nachfolgende Aufruf von operator>> fehlschlagen, egal welche Eingabe Sie angeben. Tatsächlich wird die Eingabe überhaupt nicht aus dem Stream genommen, also würden Sie sie immer wieder neu lesen.

Sie sollen den Zustand der std::in prüfen, ob Bedarf der Fehlerbits klar sein, und die ungültige Eingabe verwerfen:

if(std::in.fail()) 
{ 
    std::in.clear(); 
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
} 
+0

danke auch dafür – amgtree

Verwandte Themen