Игра случайных чисел 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;

}

2 ответа

Решение

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

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

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

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

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

// 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;
}

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

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

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

Мы видим, что это превращается в "истину", если цикл for прерывается на ранней стадии.

Другие вопросы по тегам