0

我在 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;       
}
4

2 回答 2

1

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

于 2013-09-19T03:57:25.107 回答
1

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

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

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

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

于 2013-09-19T03:57:56.093 回答