2016-07-10 89 views
-2

Also ich versuche, ein Programm zu machen, das wiederholt den Benutzer fragt, eine Zahl zu erraten. Er verliert dann (oder das Programm beendet wird), wenn eine dieser Bedingungen erfüllt sind:else Zustand get irgendwie umgangen, wenn die Benutzereingabe einen Wert hat

  • Benutzer verwendet die Nummer 5
  • Benutzer verwendet eine Nummer größer als 10
  • Benutzer verwendet eine Zahl, die der gleich ist Anzahl der vermutete mal hat er schon erraten
  • Benutzer nur 10 Versuche

Hier hat das Problem, wenn ich Eingabe der Nummer 5 als meine erste Vermutung die sonst Funktion die Saiten arbeitet und cout gibt aber Wenn ich zuerst etwas anderes errate und dann aus irgendeinem Grund die Zahl 5 verwende, wird das Programm einfach beendet, ohne die Zeichenfolge im letzten else-Block auszugeben.

hier wären, würde ich gerne ein Feedback auf, um zu sehen, was muß ich ändern, so dass ich eingeben kann mehrere Benutzereingaben und dann wir immer noch die Nummer 5, um den cout Strings in der anderen Funktion zu erhalten. Vielen Dank im Voraus :)

Hier ist der Code:

#include <iostream> 

using namespace std; 

int main() { 

    int input = 0; 
    short counter = 0; 

    cout << "Hello fellow PC-User why don't you guess a number that is between 1-10 ?" << endl; 
    cout << "Come on give it a try!\nOnly two conditions (maybe three) don't use the Number 5 and only Numbers 1-10!\nNow let's go!!!" << endl; 
    cin >> input; 



    if(input != 5 && input < 10){ 

     while(input != 5 && input < 10) { 
     ++counter; 
     cout << "Nice you guessed " << counter << flush; 
     if (input > 1){ 
      cout <<" times!" << flush; 
     } else{ 
      cout << " time!" << flush; 
     } 
     cout << "\nNow go at it again just don't used the number the times u tried bro!" << endl; 
     cin >> input; 
     if(counter == 10){ 
      cout << "Damn that motivation doe...well what can I say\n I give up \n U win." << endl; 
      return 0; 
     }  else if(counter == input){ 
      cout << "Don't do it..." << endl; 
      return 0; 
     } 
     } 
    } else { 
     cout << "Yo! You weren't supposed to use that number!\nNow u looooose" << endl; 
    } 

    return 0; 
} 

Antwort

2

Der else Teil des Blocks wird nicht in der while Schleife innerhalb des if Blocks aufgerufen.

Wenn Ihre erste Eingabe korrekt ist, das heißt, die Bedingung in

if(input != 5 && input < 10){ 

ausgewertet true, die else Teil wird nie ausgeführt werden sollen. Sie müssen den if Block und die while Schleife ein wenig anders reorganisieren, wenn Sie wollen, dass der else Block ausgeführt wird, unabhängig davon, ob die Bedingung der if Anweisung zu false auswertet.

// Simple conditional. 
// Loop forever until a break statement in the loop breaks the loop. 
while(true) { 

    if(input != 5 && input < 10){ 

     ++counter; 
     cout << "Nice you guessed " << counter << flush; 
     if (input > 1){ 
     cout <<" times!" << flush; 
     } else{ 
     cout << " time!" << flush; 
     } 
     cout << "\nNow go at it again just don't used the number the times u tried bro!" << endl; 
     cin >> input; 
     if(counter == 10){ 
     cout << "Damn that motivation doe...well what can I say\n I give up \n U win." << endl; 
     return 0; 
     }  else if(counter == input){ 
     cout << "Don't do it..." << endl; 
     return 0; 
     } 
    } else { 
     cout << "Yo! You weren't supposed to use that number!\nNow u looooose" << endl; 

     // Provide a way to break out of the while loop. 
     break; 
    } 
} 
+0

Oh ich verstehe. Das funktioniert sehr gut! – XIIREX

+0

@XIIREX, Sie sind willkommen. –

0

äußerte, wenn die Bedingung wirklich benötigt wird, nicht, weil es nur erstes Mal ausgeführt wird. Verschieben Sie einfach den if-else-Teil nach der while-Schleife und sehen Sie, was passiert. Eigentlich, wenn Bedingung überhaupt nicht benötigt wird, da Sie While-Schleife nur dann verlassen werden, wenn Eingabe == 5 oder Eingabe> 10. Und Sie müssen auch auf negative Zahlen achten.

+0

Dachte nicht über negative Zahlen nächsten Thins Ich werde versuchen und sortieren. Vielen Dank! – XIIREX