随机数游戏C.

时间:2014-02-13 21:29:03

标签: c for-loop while-loop do-while srand

尽管如此,我第一次玩游戏时效果很好。第二次它只给你两个生命...我试图改变生活的数量,但仍然无法弄清楚我做错了什么。

  

// 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 个答案:

答案 0 :(得分:1)

有两个问题的组合。第一个是当数字匹配时你没有突破“for”循环。因此,只在每三次猜测时检查匹配。

第二个问题出在这个逻辑检查中:

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

如果for循环早期被打破,我们会看到这变为“真”。

答案 1 :(得分:1)

您的代码存在各种问题(大多数问题在编程方面都很小)。大多数错误都是你想要通过这个问题完成的错误和printf()。

按原样,此代码将在1-25之间随机,接受任何有效int的输入,看看你是否匹配它,并且只给你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;
}