簡體   English   中英

使用while循環和if語句調試在C中猜測游戲

[英]Guessing game in C with while loops and if statements debugging

因此,我正在創建一個猜游戲程序。 應該要求玩家1輸入0到99之間的數字,如果他們輸入了超出此范圍的任何數字,則代碼應要求他們重試。

然后,它將要求玩家進行一定的猜測/嘗試,玩家2必須輸入他們認為的數字。 如果太高,程序會說,如果太低,程序會說。 如果是正確的話,玩家2會獲勝,如果他們用完了所有的猜測,那么程序也要這樣說。

我的問題是這段代碼的后半部分。 我試圖將剩余的猜測與猜測的數目相匹配的地方。 循環無效; 這是代碼:

  int secretnumber;
  int guesses;
  int secretnumberguess;
  int remainingguesses;

  while (1)  {
    printf("Player 1: Type a number between 0 and 99 and press return:\n");
    scanf(" %d",&secretnumber);

    if (secretnumber > 99 || secretnumber < 0) {
      printf("Secret number cannot be greater than 99 or below 0.\n");
      continue;
    }
    break;
  }

  printf( "Type the number of guesses that player 2 gets and press return: \n");
  scanf("%d",&guesses);

  remainingguesses = guesses - 1;

  while (remainingguesses != 0)  {
    printf("Player 2: Type your guess and press return (guesses remaining:%d):\n",&remainingguesses);
    scanf(" %d",&secretnumberguess);

    if (secretnumberguess > secretnumber) {
      printf("Your guess was greater than the secret number.\n");

      else if (secretnumberguess < secretnumber)
        printf("Your guess was less than the secret number.\n");

        else (secretnumberguess == secretnumber)
               printf("Your guess was equal to the secret number. You win!\n");
      continue;
    }
    break;
  }

  if (remainingguesses == 0)
    printf("Sorry you are out of guesses. You lose.\n");

我對此是全新的,並嘗試調試和修復我的代碼。 但是循環對我來說確實是一場噩夢,尤其是當您將if語句放入混合中時。 我意識到自己很無能,對此我深表歉意,但是由於我對代碼的后半部分完全感到困惑,因此有人可以幫助我。

首先,這段代碼:

while (remainingguesses != 0)  {
    printf("Player 2: Type your guess and press return (guesses remaining:%d):\n",&remainingguesses);
    scanf(" %d",&secretnumberguess);

是錯的。 當使用printf語句時,您試圖在該語句中輸入變量,則無需在其中添加&

因此,您需要將代碼更改為:

while (remainingguesses != 0)  {
    printf("Player 2: Type your guess and press return (guesses remaining:%d):\n",remainingguesses);
    scanf(" %d",&secretnumberguess);

您需要在printf語句中刪除& 我們僅使用&喜歡將內容存儲到變量中。

逐步編寫代碼,尊重適當的語法並理解下一步要完成的工作。 不要着急 學習只需要時間,編程也是如此。

remainingguesses = guesses - 1;

變量剩余的預言控制着你的循環,但是你只給它賦了一個值,以后再也不會改變它。 循環將永遠不會結束。 糾正此問題后,問自己:如果輸入3個猜測,我將能做幾個猜測?

printf("Player 2: Type your guess and press return (guesses remaining:%d):\n",&remainingguesses);

在這里,您要打印的內存地址保存的是剩余的剩余值,而不是其實際值。 這是指針背后的概念,我建議您進行研究以便對此處涉及的機制有適當的了解。

if (secretnumberguess > secretnumber) {
  printf("Your guess was greater than the secret number.\n");

  else if (secretnumberguess < secretnumber)
    printf("Your guess was less than the secret number.\n");

    else (secretnumberguess == secretnumber)
           printf("Your guess was equal to the secret number. You win!\n");
  continue;
}
break;

小心那些牙套! 僅當猜測大於密碼時才輸入整個塊。 在任何其他情況下,執行都會跳到中斷處 ,然后退出while循環。 我相信這種混淆也使您也混淆了continuebreak的用法。

否則將作為您的條件語句的偶然性。 它不需要布爾值,也不需要像您正在使用的那樣的比較。 換句話說,如果猜測的數字既不大於也不小於秘密數字,則保證等於該數字。

已經提到過這一點,但我對此不太強調:注意編譯器。 研究每一個錯誤並提供警告。 您將以這種方式確保進度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM