gpt4 book ai didi

c - 为什么我生成的随机数在循环内没有改变? C

转载 作者:行者123 更新时间:2023-11-30 20:39:26 24 4
gpt4 key购买 nike

这是我当前的代码。我正在尝试创建一个游戏,其中计算机生成一个随机数,用户必须猜测它是否高于或低于显示的数字。但是我无法获得随机数来更改它始终保持不变。

那么我怎样才能改变随机数,以便用户可以继续猜测而不是陷入以下循环:高于或低于6?0高于或低于6?0

#include <stdio.h>

int main ()

{
int rdmnum;
int rdm2;
int guess;
int x = 1;

srand (time(NULL));
rdmnum = rand () % 9;


printf("To guess higher enter 1, to guess lower enter 0.\n");


printf("Higher or lower than %d?\n", rdmnum);
scanf("%d", &guess);
do {
if (guess == 1 && guess >= rdmnum){
printf("Higher or lower than %d?\n", rdmnum);
scanf("%d", &guess);
x = 1;
}
else {
x = 0;
}

if (guess == 0 && guess <= rdmnum){
printf("Higher or lower than %d?\n", rdmnum);
scanf("%d", &guess);
x = 1;
}
else {
x = 0;
}
} while (x ==1);

if (x ==0) {
printf("Incorrect the number was %d, game over!\n", rdmnum);
return 0;
}

}

最佳答案

回答为什么 rdmnum 没有改变:

试试这个:

//code
do {
rdmnum = rand () % 9; //Take note of this line!
if (guess == 1 && guess >= rdmnum){
printf("Higher or lower than %d?\n", rdmnum);
//rest of code

您仅在循环之外运行了 rand() 函数一次。因此,您只计算一次随机数,并且每次都使用它。

通过将其移入循环,每次循环迭代时,都会生成一个新的随机数。

编辑:

根据您的评论,您的算法存在更大的问题。

从您对两个随机数的声明以及我掩盖的问题中的一些额外要点来看,您的问题不仅仅是 rdmnum 没有改变。

您的if也需要工作;第二个 if 会覆盖第一个的结果。

你可以尝试:

if (guess == 1 && guess >= rdmnum)
{
printf("Higher or lower than %d?\n", rdmnum);
scanf("%d", &guess);
x = 1;
}
else if (guess == 0 && guess <= rdmnum)
{
printf("Higher or lower than %d?\n", rdmnum);
scanf("%d", &guess);
x = 1;
}
else
{
x = 0;
}

这样,如果玩家猜对了 1(并且猜对了),那么第二个 if 就不会每次都将 x 设置为 0。此外,您正在针对 0-1 范围内的数字测试 0-9 范围内的数字。这通常会非常导致输入0正确,但1很少会正确 - 仅当您的问题输出为:

Higher or lower than 0?

我冒昧地用更简单的逻辑重写了您的程序。我还添加了第二个随机数的使用,以便您猜测随机数 #1 是大于还是小于随机数 #2

int main ()
{
int target;
int displayed;
int guess;
int difference;

srand (time(NULL));
printf("To guess higher enter 1, to guess lower enter 0.\n");

while(true)
{
//we randomise both the displayed number and the hidden number to compare it to
//and ensure that they are not equal
do
{
target = rand () % 9;
displayed = rand () % 9;
} while (displayed == target)

//ask the question:
printf("Higher or lower than %d?\n", displayed);
scanf("%d", &guess);
if (guess == 0 || guess == 1)
{

//now see if they were correct
difference = (target - displayed) > 0;
if (guess == difference)
{
//they were right
printf("Correct the number was %d!\n", target);
}
else
{ //they were wrong - exit the loop
printf("Incorrect the number was %d, game over!\n", target);
break;
}
}
//bad input - just loop
printf("Incorrect input!\n");
}
return 0;
}

另外,仅供引用,随机通常缩写为: rnd 不是 rdm不是一件大事,但在其他人阅读您的代码时会有所帮助

关于c - 为什么我生成的随机数在循环内没有改变? C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26610122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com