C随机数发生器有时产生相同的数字
我有奇怪的行为,其中我尝试生成随机数 ,他们有时完全相同, 或有问题,如果他们在同一时间创建? 使用VC 2012C随机数发生器有时产生相同的数字
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
您的循环速度如此之快以致time(NULL)
始终具有相同的值。这意味着你的生成器总是从相同的种子开始,所以它总会生成完全相同的值。
srand
应该只在程序中调用一次(在for
循环之外)。通常,人们从main
函数中调用它一次。
移动srand((unsigned int)time(NULL));
出for
循环。
这是正确的答案,但你应该解释为什么是这样的情况。 – Michael
这将是有益的,告诉解释在哪里可以确切地被称为和什么是可能的解决方案的利弊。 – gdziadkiewicz
在for循环中你初始化我为array_size
,你是用递增我循环它,直到i<array_size
。那是什么?请张贴更多的代码。
这不是一个答案 – jpo38
它**没有**递增'我'和循环将不会执行一次。无论如何,这不是主要问题,因为即使OP修复了循环,它也无法工作 –
你应该在循环之外使用'srand'并且一次。 – ameyCU
oops更正确的dup是[相同的随机数每个循环迭代](http://*.com/q/9251117/995714),[rand()在多个函数调用中是一致的](http://*.com/q/29478555/995714),[srand(time(NULL))不会快速更改种子值](http://*.com/q/5574914/995714),[srand() - 为什么只调用它一次?](http://*.com/q/7343833/995714) –