2016-08-06 13 views
-3

Ich habe diesen Code, es ist nur ein Teil von einem anderen größeren Code. Dies mag wie ein sehr einfacher Fehler erscheinen, aber ich kann immer noch nicht herausfinden, was es ist. Mein Problem ist, dass der Wert von 'Haus1' die While-Schleife nicht verlassen kann und weitergehen kann, um die Anweisung zu wechseln. Wenn ich zum Beispiel house1 = 0 eingegeben habe, wird das Programm "Ungültiger Wert, bitte erneut eingeben" drucken, aber wenn ich house1 = 1 eingegeben habe, nachdem ich den ungültigen Wert eingegeben habe, wird auch "ungültiger Wert, bitte erneut eingeben" ausgegeben. Hat jemand eine Idee, was war mein Fehler?While Schleife in C++ kann nicht

cin >> house1 ; 
while ((0 <= house1) || (house1 >= 6)) 
{ 
    cout << "Invalid value! please enter again:"; 
    cin >> house1; 
} 
switch (house1) 
{ 
case '1': 
    h1_p1 = h1_p1 - 5; 
    h2_p1 = h2_p1 + 1; 
    h3_p1 = h3_p1 + 1; 
    h4_p1 = h4_p1 + 1; 
    h5_p1 = h5_p1 + 1; 
    house_p1 = house_p1 + 1; 
    break; 
case '2': 
    h2_p1 = h2_p1 - 5; 
    h3_p1 = h3_p1 + 1; 
    h4_p1 = h4_p1 + 1; 
    h5_p1 = h5_p1 + 1; 
    house_p1 = house_p1 + 2; 
    break; 
+1

'0 <= house1' Ich denke, dieser ist invertiert. Weil 0 <= 1 ist, wird es dich erneut fragen. * Auch * 'Fall' 1 '' und 'Fall 1' ist nicht das Gleiche. Ihre While-Schleife prüft auf den Integralwert 1, aber Ihre Case-Anweisung prüft den Integralwert des * Zeichens * 1. – Borgleader

+0

Lesen Sie die Bedingung in der 'while'-Anweisung sorgfältig durch. Was macht es, wenn 'house1' gleich 0 ist? (Beachten Sie auch, dass die beiden Klammern um die beiden Vergleiche in dieser Anweisung redundant sind) –

+1

Ich glaube, Sie wollen '(house1 <= 0)' und nicht '(0 <= house1)'. –

Antwort

1

Wenn Sie den gültigen Wert gemeint 1-5 sein sollte, sollte die Bedingung

while ((house1 <= 0) || (house1 >= 6)) 
{ 
    cout << "Invalid value! please enter again:"; 
    cin >> house1; 
} 

BTW sein: Sie sind nicht ungültig Eingangsprüfung (die failbit von cin) für house1.

1

Das Hauptproblem mit diesem Code ist diese Aussage

while ((0 <= house1) || (house1 >= 6)) 

Sehen Sie, wenn Sie 0,1,2,3,4,5,6,7,... oder eine positive ganze Zahl (als Wert house1) geben diese while-Anweisung für das richtig ist.

So geht das Steuerelement in die While-Schleife und wird nicht aus der Schleife kommen, bis Sie die negative Zahl eingeben ... Da nur bei Eingabe der negativen Zahl die Bedingung in der while-Anweisung nicht erfüllt und die Kontrolle wird aus der Schleife kommen.