如何生成变化的随机数?

时间:2014-04-06 06:17:42

标签: c

void main()
{
   int i,sample;
   clrscr();
   for(i=0;i<5;i++)
   {
      sample=rand();
      printf("%d\n",sample);
   }
   getch();
}

对于上述代码,每次执行时,都会生成相同的随机数346,130,10982,1090,11656。但是当我执行代码时,我需要生成不同的随机数。

任何人都可以帮助我吗?

2 个答案:

答案 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 ....

BTW,srandom应该是比random(3)更好的PRNG

另外,您可以直接从rand(3)(或甚至/dev/urandom读取您的随机数,这可能会阻止!);但通常不值得努力。 /dev/random/dev/urandom在Linux上可用,但可能在其他许多系统上都没有。