3

私が最初 srand(time(NULL))rollDice()機能で使用したとき、それは機能しませんでした。しかし、私がそれをメインに置くと、それは機能します。何故ですか?論理を教えていただけますか?

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

int rollDice(void) {
    return (1+rand()%6) + (1+rand()%6);
}
int main(void) {
    int roll;
    srand(time(NULL));          
    roll = rollDice();
    printf("You rolled %d.\n", roll);

    enum Gamestatus {WON,LOST,CONTINUE};
    enum Gamestatus status;

    while(status==CONTINUE){
        printf("You are rolling again: \n");
        printf("You rolled %d\n", roll = rollDice());

        if (targetPoint==roll){
            printf("You win!");
            status=WON;
        }
        else if(7==roll){
            printf("You lost!");
            status=LOST;
        }
        else
            status=CONTINUE;
    }
    return 0;
}
4

3 に答える 3

9

何百万もの乱数の行を持つ本があるとしましょう。乱数を取得する前に、本を選択する必要があります。

本を手に入れた後、乱数を取得するには、本から数字を順番に読み取ります。本を変更すると、乱数の別のシーケンスが取得されます。
同じブックに変更すると、ブックの最初の番号からシーケンスが再開されます。

srand()本を選んで最初から乱数を始める 選択した本から
rand()次の数字を読む

ループ内に配置srand()すると、同じ本の最初から乱数シーケンスを効果的に再開します。

解決策: 1 冊の本を一度選択し、そこから数字を読み続けます。

C プログラムでは、「ブックを選択」しない場合、乱数はブック #1 から取得されます。つまり、呼び出しがない場合srand()、関数は呼び出さrand()れたかのように動作しsrand(1)ます。

于 2013-03-22T13:10:28.163 に答える