簡體   English   中英

創建數字猜謎游戲C

[英]Creating a number guessing game C

我試圖用C制作一個數字猜謎游戲,其中計算機選擇一個數字,而您必須猜測它是哪個數字。 如果您選擇的數字大於要猜測的數字,則說明數字過高,反之亦然。 但是,在我的實現中,無論您猜到多少,它都是不正確的。 如果您能告訴我下面的代碼出了什么問題,我將不勝感激。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
   srand(time(NULL));
   char instring[1];
   int inint;
   int guess;
   guess=rand();
   while (guess!=inint){
      printf("Guess Number\r\n");
      gets(instring);
      inint=atoi(instring);
      if(inint>guess){
         puts("too high");
      }else if(guess>inint){
         puts("too low");
      }else{
         puts("right");
      }
   }
   return 0;
}

char instring[1]; AC字符串需要一些字符的空間+一個以0結尾的空格。您的字符串長度為1,因此只能容納0終止字符。請嘗試將其大小設置為32。

另外,在使用inint之前,它永遠不會初始化(這很糟糕)-運氣不好, inint可能== guess在用戶== guess之前就進行了猜測。

另請參見為什么gets函數如此危險以至不應使用?

您可以這樣做:

char buffer[32]
fgets(buffer, sizeof(buffer), stdin);

作為一種安全的方法,只需很少的更改,或者您可以查看一下scanf() 兩者都比gets更安全

您的代碼中有很多不清楚的地方,首先要弄清楚。 inint第一次沒有初始化。 也是為什么instring大小只有1 byte 如果您輸入的是min 1 char還需要2 byte ,外加1個用於終止\\0字符。 因此增加instring的大小。

int main(void){
        srand(time(NULL));
        char instring[32];/* increase the size */
        int inint = 0;/* u forget to initialize */
        int guess=rand();
        while (guess!=inint){ /* when this condition fails ? */
                printf("Guess Number\r\n");
                //gets(instring);/* don't use gets(), instead use fgets() */
                fgets(instring,sizeof(instring),stdin);
                inint = atoi(instring);
                if(inint > guess){
                        puts("too high");
                }else if(guess>inint){
                        puts("too low");
                }else{
                        puts("right");
                }
        }
        return 0;
}

還要閱讀man 2 rand()並檢查返回的內容。 最后使用fgets()代替gets()

我使用scanf實現了這一點; 我不喜歡必須分配一個使用char數組來保存字符串,然后不必使用atoi轉換為整數。

請注意,當我初始化rand() ,括號后的值是最大值(減一)。 我不希望為零,所以我在數字上加了一個,以便我們的玩家猜在1到10之間。

#include <stdio.h>
#include <stdlib.h>


int main(void) {
    srand(time(NULL));

    int inint = 0;
    int guess = rand() % 10 + 1;

    while (guess != inint) {
        scanf(" %d", &inint);

        if(inint > guess){
            puts("too high");
        } else if (guess>inint){
            puts("too low");
        } else{
            puts("right");
        }
    }

    return 0;
}

與往常一樣,如果您有任何疑問,請告訴我。


關於scanf和格式說明符前的空格,今天再次有一個關於輸入緩沖區中的新行的問題,因此我將其留在這里

您的正確猜測是在while (guess != init)內部while (guess != init) 這就是您總是會有不正確的猜測的原因。

暫無
暫無

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

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