【发布时间】:2014-12-03 20:24:51
【问题描述】:
我知道当 srand() 函数在循环内被调用时,它会生成不同的随机数,因为srand() 在循环内并且循环可能完成不到一秒,因此我们每次都有相同的数字.
我的问题在这里:为什么当srand() 不在循环中时它可以正常工作?
如果循环完成不到一秒,那么种子再次出现,所有数字都相同......但它每次都会改变。虽然种子似乎保持不变。
试试下面的代码:
int k = 5;
while (k--)
{
srand(time(0));
int num1 = rand() % 6;
cout << num1 << endl;
}
【问题讨论】:
-
可能想展示一些示例代码。
-
你不应该在循环中调用 srand() 。在 main 的开头调用一次,如果你有一个 c++11 编译器,最好使用
<random> -
time()的分辨率只有一秒,因此如果您快速连续多次调用它,它可以很容易地返回相同的值,这意味着您使用相同的种子调用srand。 -
srand为随机数生成器提供种子。如果您使用与以前相同的种子调用它,则会得到相同的序列。如果您不手动执行,随机数生成器不会为每个循环迭代神奇地重置。那么,你的问题在哪里? -
我认为您对伪随机数生成器的工作原理缺乏基本的了解。也许这会有所帮助:stackoverflow.com/q/3539398/10077
标签: c++