C-rand()工作的结果,但我在整个数组中得到相同的数字

C-rand()工作的结果,但我在整个数组中得到相同的数字,c,random,C,Random,下面是两个功能:一个是掷骰子,另一个是掷统计数据。当你掷骰子时,它每次都会给你一个随机值,这很好。然而,当滚动一个属性时,它似乎给了我所有6次迭代相同的随机值。我认为这可能是因为它没有在每次迭代后正确地重置resultStat 代码如下: int Roll_Dice(int number_of_dice, int number_of_faces) { int i; int result = 0; srand((unsigned) time(NULL)); fo

下面是两个功能:一个是掷骰子,另一个是掷统计数据。当你掷骰子时,它每次都会给你一个随机值,这很好。然而,当滚动一个属性时,它似乎给了我所有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);
}
int Roll_Dice(骰子的整数,面的整数)
{
int i;
int结果=0;
srand((无符号)时间(NULL));
对于(i=0;i<骰子数;i++)
{
结果=(rand()%面数)+1;
}
返回(结果);
}
掷骰点数(骰子点数,使用次数最高)
{
int i,a,b;
int numberRolled[骰子的数量];
int resultStat=0;
对于(i=0;i<骰子数;i++)
{
编号[i]=掷骰子(骰子的编号,6);
}
对于(a=i+1;a<骰子数;a++)
{
if(编号错误[i]>编号错误[a])
{
b=编号[i];
编号错误的[i]=编号错误的[a];
编号[a]=b;
}
}
对于(i=使用最高;i>=(骰子数量-使用最高);i--)
{
结果stat+=numberRolled[i];
}
返回(resultStat);
}

每次在同一秒内再次调用时,您都使用相同的值重新设定
rand
,因为
time
只有第二粒度


您需要在
Roll_Dice
之外为随机数生成器添加种子,然后在其中连续调用
rand
。当您当前正在执行此操作时,您每次使用相同的参数调用
Roll_Dice
,并每次将随机数生成器初始化为相同的对象(除非您在计算过程中碰巧跨越第二个边界,这不太可能,因为它应该非常快),因此,结果应该是相同的。

您每次在同一秒内再次调用时都使用相同的值重新设定
rand
,因为
时间
只有第二个粒度


您需要在
Roll_Dice
之外为随机数生成器添加种子,然后在其中连续调用
rand
。当您当前正在执行此操作时,您每次使用相同的参数调用
Roll\u Dice
,并每次将随机数生成器初始化为相同的对象(除非您在计算过程中碰巧跨越第二个边界,这不太可能,因为它应该非常快),因此结果应该是相同的。

或对其进行一次种子设定,在节目开始时。太棒了!!!谢谢你的快速回复,Michael,我把srand放在我的main()中,从Roll_Dice中取出,它产生了一种魔力:)或者在程序开始时给它播一次种子。太棒了!!!谢谢你的快速回复,迈克尔,我把srand放在了我的main()中,从Roll_Dice中取出,它产生了魔力:)