当前位置: 首页 > 知识库问答 >
问题:

猜随机数冷热游戏输出

公良俊楚
2023-03-14

尝试用代码块c语言编写一个程序:

  1. 生成一个从1到100的随机密码,并要求用户猜测该数字
  2. 如果用户猜测正确,则打印猜测是正确的
  3. 对于第一个猜测,如果它不正确,应该说热
  4. 如果用户的猜测越来越接近秘密,则告诉用户他正在变热
  5. 如果他的猜测离得更远的话,也可能是冷的
  6. 游戏继续,直到猜到密码

我当前的程序在猜测是热还是冷方面给出了错误的输出,也不确定我应该将放在哪里(vs{如果有的话,或者在哪里使用 “else if”。如果不是太多,请解释变化。

#include <stdio.h>
#include <stdlib.h>
#define MAX_VAL 100

 int main(void)
{
  int next_guess, first_guess, secret, distance;
  srand(time(0));

  secret = 1 + rand()%MAX_VAL;
  distance = (secret - first_guess);

while (first_guess != secret) {
printf(" enter your guess from (1 to %d)?\n", MAX_VAL);
scanf("%d", &first_guess);

{

if (first_guess == secret)
    printf("You guessed correctly!\n");

if (first_guess != secret)
    printf("Your guess was hot enter your next guess from (1 to %d)?\n", MAX_VAL);
    scanf("%d", &next_guess);

if (next_guess == secret)
    printf("You guessed correctly!\n");

if ((next_guess-secret) < distance)
    printf("Your guess was hot,");

if ((next_guess-secret) >= distance)
     printf("Your guess was cold,");

   }
  }
  return 0;
}

共有3个答案

华英睿
2023-03-14

我不知道为什么这个游戏需要两次猜测。这是我的版本:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_VAL 100

int main(void)
{
    int guess, secret, distance;
    srand(time(0));

    secret = 1 + rand()%MAX_VAL;

    while (true) 
    {
        printf(" enter your guess from (1 to %d)?\n", MAX_VAL);
        scanf("%d", &guess);

        if (guess == secret)
        {
            printf("You guessed correctly!\n");
            break;
        }

        else
        {
            distance = guess-secret;

            if (distance>0)
                printf("Your guess was hot,");

            else
                printf("Your guess was cold,");
        }
    }

    return 0;
}
暴辰龙
2023-03-14

这是代码,你需要知道一些事情:首先你需要比较数字之间距离的绝对值,因为当你减去得到距离时,你可能会得到一个负数。

而(first_guess!=秘密)其次,您不应该比较尚未阅读的值。

没有必要把 {} 放在 IFs 之外,你需要在 if 句子之后使用它。还要尝试稍微改善一下缩进。

最后,最重要的建议,回答你的问题是,如果你有一个if,检查一些条件,你不需要放另一个如果检查opossite条件,如果只有两个条件是可能的,只需使用一个,如果需要,使用另一个如果第一个里面

例:

错误的方式:

if (first_guess == secret)
    printf("You guessed correctly!\n");

if (first_guess != secret) {
    printf("Your guess was hot enter your next guess from (1 to %d)?\n", MAX_VAL);
    scanf("%d", &next_guess);
}

right way:

if (first_guess == secret)
    printf("You guessed correctly!\n");

else {
    printf("Your guess was hot enter your next guess from (1 to %d)?\n", MAX_VAL);
    scanf("%d", &next_guess);
}

解决方案将是:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_VAL 100

#define ABSOLUTE(a) (((a)>0)?(a):(-a))

int main() {
    srand(time(0));
    int secret,new,newdistance,olddistance,ok;
    secret = 1 + rand()%MAX_VAL;
    printf ("secret is %d",secret);
    char clean;  
    do {
        printf(" enter your guess from (1 to %d)?\n", MAX_VAL);
        ok=scanf ("%d",&new);
        while ((clean=getchar())!='\n');
    } while(ok!=1);
    newdistance = (secret - new);
    do {
        if (new == secret)
        printf("You guessed correctly!\n");
        else {
            do {
                printf("enter your guess from (1 to %d)?\n", MAX_VAL);
                ok=scanf ("%d",&new);
                while ((clean=getchar())!='\n');
            } while(ok!=1);
            if (new == secret)
                printf("You guessed correctly!\n");
            else {
                olddistance=newdistance;
                newdistance=secret-new;
                if (ABSOLUTE(newdistance) < ABSOLUTE(olddistance))
                    printf("Your guess was hot,");
                else
                    printf("Your guess was cold,");
            }
        }
    } while (new!= secret);
    return (0);
}

我在 ((干净 = getchar())!='\n') 时添加了该行,以确保正确读取来自用户的每个输入。

如果宏给您带来问题,这里有一个使用函数而不是宏来计算绝对值的实现:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_VAL 100


int absolute (int a) {
    return (a>0?a:-a);  
}


int main() {
    srand(time(0));
    int secret,new,newdistance,olddistance,ok,flagfirstguess;
    flagfirstguess=1;
    secret = 1 + rand()%MAX_VAL;
    printf ("secret is %d",secret);
    char clean;  
    do {
        printf(" enter your guess from (1 to %d)?\n", MAX_VAL);
        ok=scanf ("%d",&new);
        while ((clean=getchar())!='\n');
    } while(ok!=1);
    newdistance = (secret - new);
    do {
        if (new == secret)
            printf("You guessed correctly!\n");
        else {
            if (flagfirstguess==1) {
                printf("Your guess was hot enter your next guess from (1 to %d)?\n", MAX_VAL);
                flagfirstguess=0;
            }
            else {
                do {
                    printf("enter your guess from (1 to %d)?\n", MAX_VAL);
                    ok=scanf ("%d",&new);
                    while ((clean=getchar())!='\n');
                } while(ok!=1);
                if (new == secret)
                    printf("You guessed correctly!\n");
                else {
                    olddistance=newdistance;
                    newdistance=secret-new;
                    if (absolute(newdistance) < absolute(olddistance))
                        printf("Your guess was hot,");
                    else
                        printf("Your guess was cold,");
                }
            }
        }
    } while (new!= secret);
   return (0);
}
姬昀
2023-03-14

您的代码

if (first_guess != secret)
  printf("Your guess was hot enter your next guess from (1 to %d)?\n", 
    MAX_VAL);
  scanf("%d", &next_guess);

不做您认为它会做的事情,if语句只会影响printf语句,而不会影响scanf语句。您应该用大括号将语句括起来

if (first_guess != secret)
{
  printf("Your guess was hot enter your next guess from (1 to %d)?\n", 
    MAX_VAL);
  scanf("%d", &next_guess);
}

我不喜欢使用scanf()进行键盘输入,所以我会使用fgets()来指定最大缓冲区大小,然后将该值转换为整数,或者使用sscanf()进行转换

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

or

char buffer[32];
fgets( buffer, sizeof(buffer), stdin );
sscanf( buffer, "%d", &next_guess );

您应该始终初始化C中的所有变量

int next_guess = 0, first_guess = 0, secret, distance = 0;
 类似资料:
  • 我的程序应该要求用户猜测 0 到 100 之间的数字,但我似乎无法正确输出。目前,如果用户数大于随机数,它会打印出无限数量的“您的数字太高”。此外,如果第一个 UserGuess 很低,那么以下所有数字都将具有相同的提示:(“您的数字太低”),尽管它们实际上大于随机数。我不知道我做错了什么。任何帮助将不胜感激。谢谢!

  • 在这个程序中,计算机生成一个随机数(在1-100之间),用户试图猜测它。一直运行到用户正确猜出数字为止。需要打印出在正确猜测数字之前所花费的尝试总数。程序运行正常,但存在逻辑错误。当我正确猜测数字时,什么都没有打印出来;程序只是停止。

  • 我在做一个数字猜谜游戏: 计算机在间隔内生成一个数字 我试着猜测它,并收到一个回复,不管它是高于/低于我的猜测,还是等于我的猜测,我赢了 有一个可以猜测的间隔,还有一个猜测尝试限制

  • 我是JAVA新手,我一直在写一个数字猜谜游戏的代码,计算机从0-500的条件下选择数字:如果数字太低,用户输入0,计算机猜更低的数字;如果数字太高,用户输入1,计算机猜更高的数字 以5个猜测结束游戏 任何建议都将不胜感激!!!:d

  • 好吧,我知道这个以前有人问过,但我就是想不出哪里出了问题。以下是我的说明: “编写一个程序,生成1到1000之间的随机数。然后让用户猜猜数字是多少。如果用户的猜测值高于随机数,程序应该显示“太高,再试一次”。如果用户的猜测值低于随机数,程序应该显示“太低,再试一次”。程序应该使用一个循环,直到用户正确猜测出随机数。 还有,保持用户猜测次数的计数。当用户正确猜测随机数时,程序应该显示猜测的次数。输入