下面是两个功能:一个是掷骰子,一个是掷统计。当你掷骰子时,它每次都给你一个随机值,这是好的。然而,当滚动一个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/