【问题标题】:C program - srand() [duplicate]C程序 - srand() [重复]
【发布时间】:2012-11-22 21:05:28
【问题描述】:

可能重复:
Recommended way to initialize srand?

在 c 中使用 srand() 时遇到以下问题。

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

我该如何解决这个问题?

【问题讨论】:

  • 你为什么要循环调用srand()?你只需调用一次,然后使用rand()
  • 在程序开始时只调用一次 srand()。
  • 我正在尝试使用 srand(time()) 和 srand(num) 生成密码,因此,每次迭代完成时我都会覆盖 srand()。这就是为什么我在循环中有 srand() 的原因。每次迭代都会更改两次

标签: c srand


【解决方案1】:

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

【讨论】:

  • 因为我在循环中有 2 个 srand() 用于两个不同的目的。一个使用 time(),另一个使用 randomSeed。要生成随机种子,我需要 srand 和时间。
【解决方案2】:

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

您应该做的是以微秒为单位获取时间。如果您正在为 windows google microseconds win32 C 编写代码,请查看 gettimeofday(),您需要将其从双精度转换为整数所以只需执行此操作 (unsigned int)double * 100.0f;

【讨论】:

  • struct timeval tv; gettimeofday(&tv,NULL); unsigned long time_in_micros = 1000000 * tv.tv_sec + tv.tv_usec;//求播种的微秒数 srand()
【解决方案3】:

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

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

【讨论】:

  • 因为我在循环中有 2 个 srand() 用于两个不同的目的。一个使用 time(),另一个使用 randomSeed。为了生成随机种子,我需要时间的 srand。 – phedon rousou 刚刚编辑
  • 如果您需要多个随机数生成器,我建议您使用来自 3rd 方库的一个,并创建多个实例。反正兰德不是很好……
【解决方案4】:

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

如果你想生成一个介于 1 和 10 之间的随机整数,你应该 总是通过使用高位来做到这一点,如

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

【讨论】:

    【解决方案5】:

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

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

    在您的情况下,您不断调用 srand 具有相同的值(直到第二次更改),因此 rand() 将始终返回相同的值。

    您只需拨打srand 一次。

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-28
        相关资源
        最近更新 更多