Visual C ++中的随机函数不是随机的

时间:2013-09-19 03:55:02

标签: c++ visual-c++ visual-studio-2012

我在Mac上有这个dieRole功能但是当我把它移到Visual C ++ 2012时,每次结果都是6

int dieRoll() // return a number between 1 and 6
{
    static int maxRange = RAND_MAX / 6 * 6; 

    int result;
    do
    {
        result = rand();
    }
    while(result > maxRange);    
    return result % 6 + 1;       
}

2 个答案:

答案 0 :(得分:1)

您忘记初始化伪随机生成器,但不会返回相同的数字。你需要调用srand(),例如与当前时间。

答案 1 :(得分:1)

考虑致电srand()。您可以使用时间或进程ID提供不同的种子。请记住,这是伪随机性,不一定是您可能认为是“随机”的。

int main()
{
    srand(time(NULL));

    std::cout << dieRoll() << std::endl;
}

尝试上面的代码会每隔一秒产生不同的结果。 : - )