下面是代码:
#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()
函数依然可以随机号码(相同的序列)。
现在的问题是,它如果我不指定它用什么种子?
如果函数srand不叫,兰特行为,如果函数srand(1)被调用。
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.13.html#rand
C标准实际上规定在其他的答案中记录的行为:
ISO / IEC 9899:2011§7.22.2.2的srand
功能
¶2[...]如果rand
被调用以任何呼叫之前srand
已经作出,同样的序列应当生成srand
首先用1:1的种子值调用。
该man
页载明下列 :
的函数srand()函数设置它的参数作为伪随机整数的新序列的种子由被兰特()返回。 这些序列是通过调用srand()函数具有相同的种子值可重复的。
如果没有提供种子值时,rand()函数自动地与值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
的函数srand()函数设置它的参数作为伪随机整数的新序列的种子由被兰特()返回。 这些序列是通过调用srand()函数具有相同的种子值可重复的。
如果没有提供种子值时,rand()函数自动地与值1接种。