首次执行后变量总是相同的?

时间:2013-05-07 20:23:06

标签: c++

我正在将一个python脚本移植到C ++,它调用一个函数超过一千次。我从来没有用C ++编程,所以我不确定发生了什么,也无法找到问题的更好标题。

这不是我的实际功能,但它会重现相同的错误

int maior_sequencia()
{
    int random;
    srand(time(NULL));
    int maior_sequencia = rand() % 6+1;
    printf("%i", maior_sequencia);
    return 1;
}

int main()
{
    for(int i = 1; i<=100; i++)
    {
        maior_sequencia();
    }
    return 1;
}

如果maior_sequencia()的第一个结果是3,那么它将输出3333333 ... 如果我再次运行程序,并且第一个结果是5,它将输出555555 ......

为什么会这样?

2 个答案:

答案 0 :(得分:8)

int maior_sequencia()
{
    int random;
    srand(time(NULL)); 
    //^^This will reset random seed every time you call this function
    int maior_sequencia = rand() % 6+1;
    printf("%i", maior_sequencia);
    return 1;
}

因为每次调用maior_sequencia函数时都会重置随机种子,因此它会给你相同的值。

尝试放

srand(time(NULL));
在for循环之前的main

答案 1 :(得分:3)

这个问题有两个问题。首先你使用srand和你使用时间。当你使用time()为随机数生成器播种时,time是1973年某个日期的秒数,我忘记了确切的日期,但它被称为linux时间。由于你每次都播种,你正在重置随机数生成器,这是一个很好的做法,但是,因为你用几秒钟后返回一个数字来播种它,你的程序很可能花了不到一秒的时间来运行。要么像其他人建议的那样,只对种子进行种子生成一次,要么以更精细的粒度种子... ms可能是可以接受的。