下面是两个功能:一个是掷骰子,一个是掷统计。当你掷骰子时,它每次都给你一个随机值,这是好的。然而,当滚动一个stat时,它似乎给了我所有6次迭代相同的随机值。我认为这可能是因为它在每次迭代后都没有正确地重置resultStat。
代码如下:

int Roll_Dice(int number_of_dice, int number_of_faces)
{
    int i;
    int result = 0;

    srand((unsigned) time(NULL));

    for (i = 0; i < number_of_dice; i++)
    {
        result = (rand () % number_of_faces) + 1;
    }
    return (result);
}

int Roll_Stat(int number_of_dice, int use_highest)
{
    int i, a, b;
    int numberRolled[number_of_dice];
    int resultStat = 0;

    for (i = 0; i < number_of_dice; i++)
    {
        numberRolled[i] = Roll_Dice(number_of_dice, 6);
    }
    for (a = i + 1; a < number_of_dice; a++)
    {
        if (numberRolled[i] > numberRolled[a])
        {
            b               = numberRolled[i];
            numberRolled[i] = numberRolled[a];
            numberRolled[a] = b;
        }
    }
    for (i = use_highest; i >= (number_of_dice - use_highest); i--)
    {
        resultStat += numberRolled[i];
    }

    return (resultStat);
}

最佳答案

因为rand只有第二粒度,所以每次在同一秒内再次调用它时,都会使用相同的值重新播种time
您需要在Roll_Dice外部设置随机数生成器的种子,然后在其内部连续调用rand。正如您目前所做的那样,您每次使用相同的参数调用Roll_Dice,并且每次都将随机数生成器初始化为相同的对象(除非您在计算过程中碰巧跨越了第二个边界,这不太可能,因为它应该很快),因此结果应该是相同的。

关于c - C-rand()工作的结果,但我在数组中得到相同的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35737949/

10-12 21:40