0

因此,我成功制作了以下程序,该程序将允许用户输入一个数字(介于 1 到 12 之间),然后在两个骰子成功掷出最初输入的数字后告诉用户尝试了多少次。因此,如果该人键入 7。如果两个骰子总数为 5,它将第一次进行随机掷骰,它将显示...“掷 1 的结果:3 + 2” ..etc

但是由于某种原因,当我这样做时,它需要 1000 多圈才能弹出 7,从而完成程序。骰子的几率应该在 1/12 左右而不是 1/1000 左右,所以我知道我编码错误。如果有人可以帮助我找出问题所在,那就太好了。

到目前为止,这是我的代码...

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void){

int sought;
int roll1 = 7;
int roll2 = 7;
int minAmount = 0;
int maxAmount = 6;
int counter = 0;

printf("Dice Thrower\n");
printf("==============\n");
printf("Total Sought : ");
scanf("%d", &sought);
while (sought > 12){
        printf("Bad Input! Try Again!\n");
        printf("Total Sought : ");
        scanf("%d", &sought);
        }

while (sought != roll1 + roll2){
counter++;
srand(time(NULL));
roll1 = minAmount + rand() % (maxAmount + 1 - minAmount);
roll2 = minAmount + rand() % (maxAmount + 1 - minAmount);
printf("Result of Throw %d : %d + %d\n", counter, roll1, roll2);
}
printf("You got your total in %d throws!\n", counter);
}
4

1 回答 1

3

srand()你一直在为每一次掷骰子打电话。也就是说,您使用每一行的当前时间初始化随机种子。因此,结果每 1 秒只改变一次(不是每卷一次)。

移动srand(time(NULL))到 while 循环的前面。

于 2013-03-19T00:24:56.397 回答