循环C++ srand() 函数

C++ srand() function in loop

本文关键字:函数 srand C++ 循环      更新时间:2023-10-16

我知道当在循环中调用srand()函数时,它会生成不同的随机数,因为srand()在循环内并且循环可能在不到一秒的时间内完成,因此我们每次都有相同的数字。我的问题是:为什么当srand()不在循环中时它会正常工作?如果循环在不到一秒内完成,则种子再次对所有数字都相同......但它每次都会改变。虽然种子似乎保持不变。 尝试以下代码:

int k = 5;
while (k--)
{
    srand(time(0));
    int num1 = rand() % 6;
    cout << num1 << endl;
}

使用相同的种子,随机数生成器将产生完全相同的数字序列。

我们想要的是一个"随机"的种子,或者至少每次都不同,这样随机数的序列每次都不同。

srand()函数使用系统时钟作为种子。正如评论中提到的,如果您在这一秒钟内多次拨打srand(),然后得到一个随机数,那么您每次都会得到相同的"随机"号码。

循环之外调用srand()没有什么不同,除了每次调用之间可能至少间隔一秒钟即可调用它。这意味着种子是不同的,生成的数字是不同的。

此外,正如另一条评论中提到的,通常只需要在程序开始时为随机数生成器播种一次。如果出于某种原因要多次生成相同的数字序列,则可能不希望执行此操作。