C程序 – srand()

可能重复:
建议初始化srand的方法?

在c中使用srand()时出现以下问题。

在循环中调用srand(time(NULL)),但循环在1之前完成 ,每次调用rand()时我得到相同的值。

我怎么解决这个问题?

因为种子被绑定到时间(),这是自unix时代以来的秒数,基本上你给它相同的种子因为循环花了不到一秒钟。

你应该做的是以微秒为单位获得时间。 看看gettimeofday()如果​​你正在编写windows google microseconds win32 C,你需要将它从double转换为integerso只需这样做(unsigned int)double * 100.0f;

你为什么要在循环中调用srand ? 只需在程序开始时调用一次,然后多次调用rand

不要在循环中调用srand。 你为什么做这个?

只需在循环外初始化一次。

你只需要初始化srand()一次,然后你只需要使用rand()来生成随机数。 并生成随机数使用更好的随机算法?

如果要生成1到10之间的随机整数,则应始终使用高位,如下所示

 j = 1 + (int) ( 10.0 * ( rand() / ( RAND_MAX + 1.0 ) ) ); 

srand的目的是初始化随机数生成器。

其参数称为种子。 如果你给两次相同的种子,你可以期望随机数生成器(后续调用rand() )返回相同的“随机”数字序列。

在你的情况下,你经常使用相同的值调用srand(直到第二次更改),因此rand()将始终返回相同的值。

你只需要调用一次srand

我在你的帮助下找到了答案。

  struct timeval tv; gettimeofday(&tv,NULL); unsigned long time_in_micros = 1000000 * tv.tv_sec + tv.tv_usec;//find the microseconds for seeding srand() srand(time_in_micros);