Gla*_*Zee 5 c++ random for-loop
我有一个for循环,运行15次,dh.setDoors()每次迭代.
什么setDoors是呼叫srand(time(0)),然后每当需要随机数时,它将使用,例如,carSetter = rand()%3+1.或者,它可以使用decider = rand()%2+1.
现在,通常decider和carSetter以不同的方式使用,但我怀疑一个问题,carSetter并decider在每次迭代时打印出来.这是出来的:
Door 1 has car
Decider is 2
Door 1 has car
Decider is 2
Door 1 has car
Decider is 2
Door 1 has car
Decider is 2
Door 1 has car
Decider is 2
etc...
Run Code Online (Sandbox Code Playgroud)
当我多次运行时,值"1"和"2"会发生变化,但在15次中仍然是相同的.
由于循环运行15周不同的时间,不应该carSetter和decider打印出不同的随机数每次迭代?
当我没有时srand(time(0)),它按预期工作,但没有种子集,所以每次都是相同的"随机"数字序列,所以它可能是种子的问题?
Gre*_*ill 12
当你调用时srand(x),则值x确定后续调用中返回的伪随机数的序列rand(),完全取决于的值x.
当你在循环中并srand()在顶部打电话时:
while (...) {
srand(time(0));
x = rand();
y = rand();
}
Run Code Online (Sandbox Code Playgroud)
然后根据返回的值生成相同的随机数序列time(0).由于计算机速度很快,并且您的循环可能在不到一秒的时间内运行,time(0)因此每次循环都会返回相同的值.所以,x和y将是相同的每次迭代.
相反,您通常只需要在程序开始时调用srand() 一次:
srand(time(0));
while (...) {
x = rand();
y = rand();
}
Run Code Online (Sandbox Code Playgroud)
在上述情况下,x和y将通过每次循环具有不同的值.