C随机数生成器有时生成相同的数字

时间:2016-07-30 06:44:43

标签: c random

我有奇怪的行为,我试图生成随机数 他们有时完全相同,  或者如果他们同时创建有问题? 使用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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

您的循环非常快,time(NULL)始终具有相同的值。这意味着您的生成器始终从相同的种子开始,因此它将始终生成完全相同的值。

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

答案 2 :(得分:1)

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