创建数字猜谜游戏C

时间:2018-04-16 04:36:20

标签: c numbers comparison

我正在尝试在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;
}

4 个答案:

答案 0 :(得分:1)

char instring[1]; AC字符串需要空格用于某些字符+一个额外空格用于终止0.您的字符串长度为1,因此它只能适应终止0.尝试增加它的大小来表示32。

inint在使用之前永远不会被初始化(这很糟糕) - 在用户猜测之前,可能inint可能== guess

另见Why is the gets function so dangerous that it should not be used?

你可以这样做:

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

作为一种更安全的方式,您可以查看scanf()。两者都比gets

更安全

答案 1 :(得分:0)

你的代码中有很多不清楚的东西,首先要说清楚。类似inint没有第一次初始化。另外,为什么instring尺寸仅为1 byte。如果您输入min 1 char,则还需要2 byte,另外还需要一个用于终止\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()&amp;检查它返回的内容。最后使用fgets()代替gets()

答案 2 :(得分:0)

我使用scanf实现了这一点;我不喜欢必须分配使用char数组来保存字符串,然后必须使用atoi转换为整数。

请注意,当我初始化rand()时,括号后面的值是最大值(减1)。我不想要零,所以我在数字中加了一个,这样我们的玩家就会猜到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以及格式说明符之前的空格,今天再次询问输入缓冲区中的新行,所以我只是leave this here

答案 3 :(得分:0)

您的正确猜测位于while (guess != init)内部。 这就是您总是会有错误猜测的原因。