8

这是代码:

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

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

4

5 回答 5

7

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

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

于 2013-01-10T05:39:10.340 回答
4

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

ISO/IEC 9899:2011 §7.22.2.2srand功能

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

于 2013-01-10T05:57:38.067 回答
2
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

于 2013-01-10T06:06:04.263 回答
2

这些man页面说明了以下内容

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

如果没有提供种子值,则 rand() 函数会自动使用值 1 播种。

于 2013-01-10T05:39:10.377 回答
1

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

如果没有提供种子值,则 rand() 函数会自动使用值 1 播种。

于 2013-01-10T09:02:42.063 回答