C程序 - srand()

时间:2012-11-22 21:05:29

标签: c srand

  

可能重复:
  Recommended way to initialize srand?

在c。

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

我在循环中调用srand(time(NULL)),但循环在1 秒之前结束,每次调用rand()时我都会得到相同的结果值。

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您只需初始化srand()一次,然后您只需使用rand()生成随机数。要生成随机数,请使用Better random algorithm?

  

如果要生成1到10之间的随机整数,则应该   总是通过使用高位来实现,如

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

答案 3 :(得分:0)

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

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

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

您只需拨打srand一次。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

        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);