如果我没有指定srand(),rand()使用什么种子?

时间:2013-01-10 05:36:59

标签: c random srand

以下是代码:

#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()函数仍然可以随机输入一个数字(相同的序列)。

问题是,如果我没有指定它,会使用什么种子?

5 个答案:

答案 0 :(得分:6)

如果未调用srand,则rand就像调用srand(1)一样。

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

答案 1 :(得分:4)

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

  

ISO / IEC 9899:2011§7.22.2.2srand功能

     

¶2[...]如果在对rand进行任何调用之前调用srand,则应生成与首次使用种子调用srand时相同的序列值为1。

答案 2 :(得分:2)

The man pages state the following

  

srand()函数将其参数设置为新序列的种子   rand()返回的伪随机整数。这些序列   通过使用相同的种子值调用srand()可重复。

     

如果未提供种子值,则自动执行rand()函数   种子值为1。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

srand()函数将其参数设置为rand()返回的新的伪随机整数序列的种子。通过使用相同的种子值调用srand(),可以重复这些序列。

如果未提供种子值,则rand()函数将自动播种,值为1.