[英]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循環。 我相信這種混淆也使您也混淆了continue和break的用法。
否則將作為您的條件語句的偶然性。 它不需要布爾值,也不需要像您正在使用的那樣的比較。 換句話說,如果猜測的數字既不大於也不小於秘密數字,則保證等於該數字。
已經提到過這一點,但我對此不太強調:注意編譯器。 研究每一個錯誤並提供警告。 您將以這種方式確保進度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.