避免使用srand()重复生成种子

我有一个典型的情况,我需要生成一批随机数。 我使用了一个循环,每次传递产生100个随机数:

for(int i=0; i<npasses; i++) { srand(time(NULL)); //Initialize seed for(int j=0; j<100; j++) printf("%d ", rand()%10); printf("\n"); //New line after 100 numbers } 

现在,内循环在不到一毫秒的时间内执行。 结果,time()的值没有变化。 这会将种子(srand())重新初始化为相同的值,并且我的随机数是重复的。

任何人都可以建议解决方法/修复。

在循环之前设置种子一次。

保持srand

 srand(time(NULL)); //Initialize seed for(int i=0; i 

试试这个

 srand(clock()); //Initialize seed 

您可以使用随机生成器生成新种子。

例如:

 srand((unsigned int)rand()); 

并且在循环之前只使用一次srand(time(NULL)) 。 但正如另一个答案中所建议的那样,你也可以将整个srand放在循环中。