在C中生成随机数

Bru*_*uce 0 c

我知道这个问题一再被问到.我需要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之间的随机整数,你应该总是使用高位来实现它,就像在

j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
Run Code Online (Sandbox Code Playgroud)

从来没有任何类似的东西

j = 1 + (rand() % 10);
Run Code Online (Sandbox Code Playgroud)

(使用低阶位)."

  • @Peter:好吧,我无法帮助你......你可能做了其他错误,你没有注意到,也没有复制到你发布的示例代码中.似乎没有别的错误. (2认同)

Cor*_*rey 7

你可能在第二个内部调用了这个函数,并且srand将在同一秒内播种.你应该只srand在main的开头调用一次.

  • 马蒂纽,你知道怎么样?它在它所驻留的函数内部被调用一次*,它可能是也可能不是`main()`. (2认同)