【问题标题】:Trouble with guessing game猜谜游戏有问题
【发布时间】:2016-03-16 04:43:23
【问题描述】:

我需要做一个猜谜游戏,程序生成一个随机数,用户必须猜出这个数字。如果用户猜中的数字少于 10 次,程序会向他们表示祝贺,并让他们知道他们的猜测次数少于 10 次。如果他们超过 10 次猜测,那么它会让他们知道它超过 10 次,等等。

我面临的问题是,例如,如果用户在 3 次尝试中猜到了这个数字,然后决定用一个全新的其他数字再次玩,而这次在 8 次尝试中猜到了,而不是仍然祝贺他们因为它少于 10 次尝试,所以它计算上一场比赛的 3 次尝试。然后,这会导致程序告诉他们他们已经超过 10 次尝试,即使他们没有。我不知道如何解决这个问题。目前我做的代码如下:

int main()
{
   srand(time(0));
   int guess;
   int number;
   char selection = 'y';
   int numberOfGuesses=0;

 while(selection == 'y' || selection == 'Y')
 {
      number = rand() % 1000 + 1;

      cout << "I have a number between 1 and 1000.\nCan you guess my number?\nPlease type your first guess: ";
      cin >>guess;

      do
      {
         if(number > guess)
         {
            cout << "Too low. Try again: " << endl;
            cin >> guess;
            numberOfGuesses++;
         }
         if (number < guess)
         {
            cout << "Too high. Try again: " << endl;
            cin >> guess;
            numberOfGuesses++;
         }

      } 

      while(number != guess);

      if(numberOfGuesses < 9)
      {
            cout << "You guessed the number in less than 10 guesses!\n Would you like to play again (y or n)?";
            cin >> selection;
      }
      else if(numberOfGuesses > 9)
      {
            cout << "You guessed the number\n Would you like to play again (y or n)?";
            cin >> selection;
      }

      else if(numberOfGuesses == 9)
      {
            cout << "You guessed the number.\n Would you like to play again (y or n)?";
            cin >> selection;
      }

  }

   return 0;
 }

【问题讨论】:

  • numberOfGuesses 哪里清零了?
  • 您可以使用else if (numberOfGuesses &gt;= 9) 来消除一些代码重复。

标签: c++ if-statement random


【解决方案1】:

问题是您没有重置计数器。 只需将int numberOfGuesses=0; 放在while 循环中即可:

while(selection == 'y' || selection == 'Y')
{
    int numberOfGuesses=0;
    ....
} 

【讨论】:

    【解决方案2】:

    您需要在每场比赛前将numberOfGuesses 设置为0。您的程序仅在程序首次启动时设置一次。

    【讨论】:

      【解决方案3】:

      您不会在每一轮之后将numberOfGuesses 重置为零。您可以使用以下几种方法中的一种来解决问题。

      1. 在第一个while 循环结束时将numberOfGuesses 的值重置为零。

        while(selection == 'y' || selection == 'Y')
        {
           ...
           numberOfGuesses = 0;
        }
        
      2. while 循环开始之前不要定义变量。将其定义为第一条语句并将其初始化为零。

        while(selection == 'y' || selection == 'Y')
        {
           int numberOfGuesses = 0;
           ...
        }
        

      【讨论】:

        猜你喜欢
        • 2020-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-15
        • 2014-05-12
        相关资源
        最近更新 更多