【问题标题】:C random number generator generate sometimes the same numbers [duplicate]C随机数生成器有时会生成相同的数字[重复]
【发布时间】:2016-07-30 06:44:42
【问题描述】:

我有奇怪的行为,我尝试生成随机数 他们有时完全一样, 或者如果他们同时创建有问题? 使用 VC 2012

for (int i = array_size; i < (array_size); i++)
{

        srand((unsigned int)time(NULL));
        int rw = rand() % 960 + (20); //returns a pseudo-random integer between x resolution size 0 -> width
        int rh = rand() % 640 + (20);    //returns a pseudo-random integer between x resolution size 0 -> height
        lwsl_notice("c:%d width %d height %d\n",c, rw, rh);
        c++;
}

输出是:

[2016/06/30 09:39:09:7274] NOTICE: c:0 width 606 height 567
[2016/06/30 09:39:09:7274] NOTICE: c:1 width 606 height 567
[2016/06/30 09:39:09:7274] NOTICE: c:2 width 606 height 567
[2016/06/30 09:39:09:7274] NOTICE: c:3 width 606 height 567

【问题讨论】:

标签: c random


【解决方案1】:

srand((unsigned int)time(NULL)); 移出for 循环。

【讨论】:

  • 这是正确的答案,但你应该解释为什么会这样。
  • 解释一下 srand 的确切位置以及可能的解决方案的优缺点是什么。
【解决方案2】:

您的循环是如此之快,以至于time(NULL) 始终具有相同的值。这意味着您的生成器始终从同一个种子开始,因此它将始终生成完全相同的值。

srand 应该在你的程序中被调用一次并且只能调用一次(在for 循环之外)。通常,人们从main 函数调用它一次。

【讨论】:

    【解决方案3】:

    在 for 循环中,您将 i 初始化为 array_size,然后将其循环到 i&lt;array_size,并增加 i。那是什么?请发布更多代码。

    【讨论】:

    • 这不是答案
    • 没有增加i 并且循环不会执行一次。无论如何,这不是这里的主要问题,因为即使 OP 修复了循环,它也无法正常工作
    猜你喜欢
    • 1970-01-01
    • 2013-10-22
    • 2021-12-31
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多