rand()在猜谜游戏中生成相同的数字

fub*_*ick 1 c

用C语言编程,我试图运行一个游戏,计算机生成1到100之间的数字.但是,我生成的数字一直是42 ...我的"rand()"有什么问题

#include <stdlib.h>
#include <stdio.h>
int main (void)
{
    int guess, tries = 6;
    int number = 1+(rand()%100);

    printf("Pick a number between 1 and 100:");
    scanf_s("%d", &guess);

    while(tries > 0 && guess != number)
    {
        if(guess > number)
            printf("Too high");
        else
            printf("Too low");
        puts(". Guess again:");
        scanf_s("%d",&guess);

        tries--;
    }        

    if(guess == number)
        puts("You win!");
    else
        puts("You lose");
}
Run Code Online (Sandbox Code Playgroud)

经过下面的大量讨论后,我在代码中添加了一些内容

#include <time.h>
Run Code Online (Sandbox Code Playgroud)

srand ((unsigned int)time(NULL));
Run Code Online (Sandbox Code Playgroud)

但是代码无法在MS visual studio中运行,直到我用Google搜索错误,结果发现MSVS需要在每个函数/块的顶部声明变量.执行此操作后,代码工作正常.谢谢大家,对不起多次编辑感到抱歉.更正的代码:

#include <time.h>
int main (void)
{
int guess, tries = 6, number;
srand ((unsigned int)time(NULL));
number = 1+(rand()%100);
Run Code Online (Sandbox Code Playgroud)

其余的都是一样的.谢谢你们.

P0W*_*P0W 7

使用种子 time

rand()使当前时间使用的伪随机数生成器播种.

srand(time(NULL));

在打电话之前 rand


pza*_*ger 6

您需要初始化随机种子 srand (time(NULL));

为此,您还需要包含time.h.