0

そこで、ユーザーが数字 (1 から 12 の間) を入力できるようにする次のプログラムを正常に作成し、何回試行した後に、2 つのサイコロが最初に入力した数字を正常にロールしたかをユーザーに通知します。そのため、人が 7 を入力すると、2 つのダイスの合計が 5 の場合、最初にランダム ロールが実行され、表示されます...「スロー 1 の結果: 3 + 2」..など

でもなぜかやってみると、7が出てくるまでに1000ターン以上かかってしまい、プログラムを終了してしまいます。サイコロのオッズは 1/1000 ではなく約 1/12 であるべきなので、何か間違ったコーディングをしていることがわかります。誰かが何が間違っているのかを理解するのを手伝ってくれるなら、それは素晴らしいことです.

これまでの私のコードは次のとおりです...

#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 秒に 1 回しか変化しません (ロールごとに 1 回ではありません)。

srand(time(NULL))while ループの先頭に移動します。

于 2013-03-19T00:24:56.397 に答える