1

用 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");
}

经过下面的大量讨论后,我在下面的代码行中添加了

#include <time.h>

srand ((unsigned int)time(NULL));

但是代码无法在 MS Visual Studio 中运行,直到我用谷歌搜索错误,结果证明 MSVS 需要在每个函数/块的顶部声明变量。这样做后,代码工作正常。谢谢大家,对多次编辑感到抱歉。更正的代码:

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

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

4

4 回答 4

7

使用种子time

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

srand(time(NULL));

打电话之前rand

于 2013-09-06T18:14:47.513 回答
6

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

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

于 2013-09-06T18:15:03.373 回答
2

尝试使用

srand ( (unsigned int)time(NULL) );

开始时main

不要忘记包括

#include <ctime>

或者

#include <time.h>

来自文档:-

为了生成类似随机的数字,srand 通常被初始化为一些独特的值,比如那些与执行时间相关的值。例如,函数 time (在 header 中声明)返回的值每秒钟都不同,这对于大多数随机需求来说是足够独特的。

于 2013-09-06T18:16:39.827 回答
0
#include <stdlib.h>
#include <stdio.h>

包含 srand(time(NULL)) 函数的头文件

#include <time.h>

.

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

种子随机生成器

    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");
}
于 2013-09-06T18:37:50.730 回答