void main()
{
int i,sample;
clrscr();
for(i=0;i<5;i++)
{
sample=rand();
printf("%d\n",sample);
}
getch();
}
对于上述代码,每次执行时,都会生成相同的随机数346,130,10982,1090,11656。但是当我执行代码时,我需要生成不同的随机数。
任何人都可以帮助我吗?
答案 0 :(得分:5)
使用每次运行程序时都会更改的random seed。一种常见的方法是使用当前时间。
srand(time(NULL));
答案 1 :(得分:2)
您需要seed PRNG。阅读rand(3)&amp; random(3)手册页。
作为guest answered,您可以使用当前时间(#include <time.h>
,请参阅time(2))作为种子。
time_t now;
time(&now);
srand((unsigned)now);
但是在Linux上你也可以使用/dev/urandom
设备(至少用于播种) - 请参阅random(4)了解更多信息,或者查看当前的pid(请参阅getpid(2)以获取它{{ 1}}和#include <sys/type.h>
)。
#include <unistd.h>
如果使用{ unsigned s = (unsigned)getpid();
FILE* f = fopen("/dev/urandom", "r");
if (f) { fread (&s, sizeof(s), 1, f); fclose(f); };
srand(s);
}
,请将random
替换为srand
....
srandom
应该是比random(3)
更好的PRNG
另外,您可以直接从rand(3)
(或甚至/dev/urandom
读取您的随机数,这可能会阻止!);但通常不值得努力。 /dev/random
或/dev/urandom
在Linux上可用,但可能在其他许多系统上都没有。