2014-02-13 5 views
0

Игра отлично работает в первый раз, хотя; во второй раз он дает вам две жизни ... Я пытался изменить количество жизней, но до сих пор не могу понять, что я делаю неправильно.Случайное число игра C

// C_program_random_number_game

#include<stdio.h> 
#include<time.h> 
#include <stdlib.h> 

int main() 
{ 

    srand(time(NULL)); 
    int num1,x = 0; 
    char game, cont, replay; 

    printf("Would you like to play a game? : "); 
    scanf("%c",&game); 

    if (game == 'y' || game == 'Y') 
    { 
    printf("\nThe rules are simple. You have have 5 tries to guess the computers number. \n \n If you succeed you win the game, if you dont you lose the game. Good luck!"); 
    do 
    { 
     int r = rand()%5 +1; 
     printf("\n\nEnter a number between 1 and 5 : "); 
     scanf("\n%d",&num1); 
     x++; 
     if(num1 > 0 && num1 < 5) 
     { 

      do 
      { 
      if(num1 < r) 
       { 
        printf("\nClose! try a little higher... : "); 
        x++; 
       } 
       else if (num1 > r) 
       { 
        printf("\nClose! try a little lower...: "); 
        x++; 
       } 
       scanf("%d",&num1); 

      }while(num1!=r && x <3); 

      if(num1 == r) 
      { 
       printf("\nWinner! >> you entered %d and the computer generated %d! \n",num1, r); 
      } 
      else if(num1 != r) 
      { 
       printf("\nBetter luck next time!"); 
      } 
      printf("\n\nWould you like to play again? (y or n) : "); 
      scanf("\n%c",&replay); 
     } 
      else 
     { 
      printf("Sorry! Try again : "); 
      scanf("%d",&num1); 
     } 

    }while(replay == 'y'|| replay == 'Y'); 

} 
else if (game == 'n' || game == 'N') 
{ 
    printf("Okay, maybe next time! "); 
} 
else 
{ 
    printf("Sorry, invalid data! "); 
} 
return 0; 

}

+0

Попробуйте установить int на 0. Приращивание его (например, x ++), если они ошибаются. Вероятно, это будет во внутреннем цикле do-while. Если (x == 3) вырваться. Ваша проблема в том, что вам нужен «перерыв»; заявление. Ваш «пока-то» повторяет for-loop навсегда. В любом случае, если я понимаю, чего вы хотите, не должно быть необходимости для цикла. EDIT: также x всегда меньше или равно 3 (за что говорит for-loop), поэтому проверка его в while() не имеет смысла. В отношении «while (num1! = R || x <= 3); – MrHappyAsthma

+0

Также вы печатаете «у вас есть 5 попыток», но заявляют, что вы хотите только «3» ... – MrHappyAsthma

+0

Пожалуйста, отформатируйте и правильно открепите свой код! Нет смысла пытаться найти ошибки из источника, который пытается ввести в заблуждение и запутать программиста (не показывая, где петли и т. Д. С правильным отступом). – hyde

ответ

1

Есть все виды проблем с кодом (большинство из них незначительны с точки зрения программирования). Большинство ошибок - это опечатки в том, что вы хотите сделать с помощью этого вопроса, и то, что вы напечатаете f().

Как есть, этот код будет случайным между 1-25, принять ввод любого действительного int, посмотреть, если вы его сопоставили, и только дать вам 5 попыток. (Я не добавлял проверку ошибок, чтобы обеспечить, чтобы вход был между 1-25.Это должно быть добавлено.)

Я прокомментировал свой код ниже со всеми моими изменениями и прошел мимо того, что у вас было в printf() s.

Примечание: см. Мои комментарии выше для объяснения моих изменений, поскольку я уже указал их. Я также отформатировал его, чтобы его было немного легче читать.

Note2: Я сделал это быстро, используя онлайн-компилятор. Если вы найдете что-то не так с этим или не работаете, как хотите, просто напишите ниже, и я рассмотрю его.

// C_program_random_number_game 

#include<stdio.h> 
#include<time.h> 
#include <stdlib.h> 

int main() 
{ 

    srand(time(NULL)); 
    int num1,x = 0; 
    char game, cont, replay; 

    printf("Would you like to play a game? : "); 
    scanf("%c",&game); 

    if (game == 'y' || game == 'Y') 
    { 
     printf("\nThe rules are simple. You have have 5 tries to guess the     computers number. \n \n If you succeed you win the game, if you dont you lose the game. Good luck!"); 

     do 
     { 
      int r = rand()%25 +1; 

      printf("\n\nEnter a number between 1 and 25 : "); 
      scanf("%d",&num1); 

      do 
      { 
       printf("r = %d\n", r); 

       if(num1 < r) 
       { 
        printf("\nClose! try a little higher... : "); 
        x++; //Increment x if wrong guess 
       } 
       else if (num1 > r) 
       { 
        printf("\nClose! try a little lower...: "); 
        x++; //Increment x if wrong guess 
       } 

       scanf("%d",&num1); 
      }while(num1!=r && x < 5); //If x is 5 or more, they ran out of guesses (also, you want an && not an ||) 

      if(num1 == r) //Only print "winner" if they won! 
      { 
       printf("\nWinner! >> you entered %d and the computer generated %d! \n",num1, r); 
      } 

      printf("\nWould you like to play again? (y or n) : "); 
      scanf("\n%c",&replay); 
     }while(replay == 'y'|| replay == 'Y'); 
    } 

    printf("Thanks for playing! "); 

    if (game == 'n' || game == 'N') 
    { 
     printf("Okay, maybe next time! "); 
    } 
    return 0; 
} 
1

Есть сочетание двух проблем. Во-первых, вы не выходите из цикла «for», когда число соответствует. Поэтому матч проверяется только на каждом третьем предположении.

Вторая проблема заключается в этой логической проверке:

}while(num1!=r || x <= 3); 

Мы видим, что это превращается в «истину», если цикл нарушается из рано.

Смежные вопросы