C++ srand() 循环中的函数

Mos*_*hri -2 c++

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

int k = 5;

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

}
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 5

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

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

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

srand()在循环外部调用没有什么不同,除了每次调用之间可能至少间隔一秒进行调用这一事实之外。这意味着种子不同,生成的数字也不同。

另外,正如另一条评论中提到的,通常只需要在程序开始时为随机数生成器播种一次。如果由于某种原因您想要多次生成相同的数字序列,您可能不想这样做。