我知道这个问题一再被问到.我需要0-9之间的随机数.我使用以下代码:
srand(time());
int r;
for (;;)
{
while(condition)
{
r = rand()%10;
// ...
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
现在我为for循环的每次迭代得到相同的数字序列.有人能为我提供正确的代码吗?
PS - 我的编译器无法识别arcrandom().
R. *_*des 13
这个问题源于这样的事实:在某些实现中,rand()的低位不是非常随机的.引用手册页:
"如果你想生成一个介于1和10之间的随机整数,你应该总是使用高位来实现它,就像在
Run Code Online (Sandbox Code Playgroud)j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));从来没有任何类似的东西
Run Code Online (Sandbox Code Playgroud)j = 1 + (rand() % 10);(使用低阶位)."
你可能在第二个内部调用了这个函数,并且srand将在同一秒内播种.你应该只srand在main的开头调用一次.
| 归档时间: |
|
| 查看次数: |
1002 次 |
| 最近记录: |