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

时间:2013-09-06 18:13:38

标签: 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");
}
经过下面的大量讨论,我在下面的代码行中添加了

#include <time.h>

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

但代码无法在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);

其余的都是一样的。谢谢大家。

4 个答案:

答案 0 :(得分:7)

使用time

的种子

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

srand(time(NULL));

在致电rand

之前

答案 1 :(得分:6)

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

为此,您还需要加入time.h

答案 2 :(得分:2)

尝试使用

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

main的开头。

不要忘记包含

#include <ctime>

#include <time.h>

来自文档: -

  

为了生成类似随机数的数字,srand通常被初始化   一些独特的价值,如与执行时间相关的价值。   例如,函数时间返回的值(声明为   标题)每秒都不同,这是足够独特的   最随机的需求。

答案 3 :(得分: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");
}