2017-02-01 20 views
1

Ich versuche, ein einfaches Spiel zu schaffen, wo der Benutzer durch ein Labyrinth gehen muss. Zu Beginn des Labyrinths gebe ich dem Benutzer mögliche Routen und frage den Benutzer, welche Route er als nächstes nehmen soll. Wenn der Benutzer eine korrekte Route eingibt, bringe ich ihn zur nächsten Route. Wenn der Benutzer eine falsche Route eingibt, drucke ich eine Fehlermeldung, gefolgt von der Eingabeaufforderung, und lese seine Eingabe erneut.zurück zum Anfang einer if-Anweisung in einer Schleife

Ich habe Probleme herauszufinden, was ich tun soll, nachdem ich die Fehlermeldung ausgedruckt habe. Wie gehe ich zurück zum Anfang der Schleife? Ich habe etwas geforscht und fange an zu denken, dass ich stattdessen eine Do-while-Schleife verwenden sollte, aber angesichts der Iterationen dazwischen (diesen Schritt wiederholend, bis der Benutzer den Ausgang des Labyrinths findet), habe ich Mühe, genau herauszufinden, wie es geht Das.

Hier meine ursprüngliche if-else-Anweisung lautet:

 printf("Prompt for user input\n");  //step1 
     //user input       
     scanf("%s", &input);     //step2 
     //check input 
     for (i = 0; i < 7; i++) { 
      if (strncmp(input, condition) == 0){//do something} 
      else{ 
        printf("error\n"); 
        //need to do steps 1 and 2 again 
     } 

Sie sich die Zeit danken, wäre jede Hilfe sehr dankbar!

+1

Put Schritte 1 und 2 in der Schleife? – lurker

+2

'continue' überspringt den Rest einer 'for'-Schleife und kehrt im Wesentlichen zur ersten Anweisung zurück (wenn die Endebedingung nicht wahr ist). Bei verschachtelten Schleifen nur die aktuelle Schleife, nicht die äußere Schleife. –

+0

Wiederholen Sie die Schritte 1 und 2 in der Schleife: Ich habe bereits versucht, dass beim Drucken der Fehlermeldung das Programm nicht zu den Schritten 1 und 2 zurückgeht. –

Antwort

1

Der einfachste Weg ist es, es in eine andere Schleife zu wickeln.

bool game_over = false; 

do { 
    printf("Prompt for user input\n");  //step1 
    //user input       
    scanf("%s", &input);     //step2 
    //check input 

    bool input_okay = true; 
    for (i = 0; i < 7; i++) { 
     if (strncmp(input, condition) == 0) { 
      //do something 
     } 
     else{ 
       printf("error\n"); 
       input_okay = game_over = false; 
       break; 
    } 

    if (!input_okay) 
     continue; // restart do while 

    // 
} while(!game_over); 

Die Flaggen (mit dem von stdbool.hbool Typ definiert) sicher, dass die Aussage weiter zu machen sind erforderlich, im richtigen Umfang ausgeführt wird (der do ... while Schleife).

+0

Danke, das funktioniert perfekt! –

0
bool OK = false 
while(! OK) { 
    printf("Prompt for user input\n");  //step1 
    //user input       
    scanf("%s", &input);     //step2 
    //check input 
    for (i = 0; i < 7; i++) { 
      if (strncmp(input, condition) == 0) 
      {//do something} 
       OK = true 
      } 
      else 
      { 
        printf("error\n"); 
        //need to do steps 1 and 2 again 
        OK = false; 
      } 
    } 
} 
2

Von Ihrer Frage konnte ich verstehen, dass Sie den Benutzer dazu auffordern, Wert einzugeben, bis er die richtige Antwort gibt oder er die 7 Chancen vervollständigt.

können Sie tun, verwenden while-Schleife für das gleiche:

int chanceCount = 0; //it will keep track of number of chances user gets 

do { 
      printf("Prompt for user input\n");  
      //user input       
      scanf("%s", &input); 

      if (strncmp(input, condition) == 0) 
      { 
        //do something 
        break; /* come out of loop, as user gave correct answer*/ 
      } 
      else 
      { 
       printf("error try again \n"); 

      } 
      chanceCount ++; 
    }while(chanceCount != 7); 
Verwandte Themen