如果我不指定srand()函数,并兰特()用什么种子?(If I don't specify

2019-07-18 01:32发布

下面是代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int r;
    int i;
    for (i = 0; i < 100; i++)
    {
        r = rand() % 100 + 1;
        printf("%d\n", r);
    }
    return 0;
}

我一直在试图随机数,但有一天,我忘了把srand()中,但rand()函数依然可以随机号码(相同的序列)。

现在的问题是,它如果我不指定它用什么种子?

Answer 1:

如果函数srand不叫,兰特行为,如果函数srand(1)被调用。

http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.13.html#rand



Answer 2:

C标准实际上规定在其他的答案中记录的行为:

ISO / IEC 9899:2011§7.22.2.2的srand功能

¶2[...]如果rand被调用以任何呼叫之前srand已经作出,同样的序列应当生成srand首先用1:1的种子值调用。



Answer 3:

man页载明下列 :

的函数srand()函数设置它的参数作为伪随机整数的新序列的种子由被兰特()返回。 这些序列是通过调用srand()函数具有相同的种子值可重复的。

如果没有提供种子值时,rand()函数自动地与值1接种。



Answer 4:

If rand() is called before any calls to srand() are made, the same sequence shall 
be generated as when srand() is first called with a seed value of 1.

参考:

http://pubs.opengroup.org/onlinepubs/009695399/functions/rand.html



Answer 5:

的函数srand()函数设置它的参数作为伪随机整数的新序列的种子由被兰特()返回。 这些序列是通过调用srand()函数具有相同的种子值可重复的。

如果没有提供种子值时,rand()函数自动地与值1接种。



文章来源: If I don't specify srand(), what seed does rand() use?
标签: c random srand