1

我正在将一个 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,它将输出 55​​5555...

为什么会这样?

4

2 回答 2

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));

mainfor 循环之前。

于 2013-05-07T20:24:44.223 回答
3

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

于 2013-05-07T20:29:52.207 回答