1

重複の可能性:
ループの反復ごとに同じ乱数

これが私のコードです:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int attack() {
    srand((unsigned)time(NULL));
    int hits=0;
    for (int i=0;i<=3;i++) {
        int a = rand() % 6;
        if (a==6 || a==5)
        {
         hits++;   
        }
    }
    return hits;
}

int main () {
    int a=attack();
    cout << a << endl;
    int b=attack();
        cout << b << endl;
    int c=attack();
        cout << c << endl;
    int d=attack();
        cout << d << endl;
    int e=attack();
        cout << e << endl;
    int f=attack();
        cout << f << endl;
    int g=attack();
        cout << g << endl;
    int h=attack();
        cout << h << endl;
}

すべての変数がmain()同じ数になるのはなぜですか?

次のような出力しか得られません。

1
1
1
1
1
1
1
1
4

1 に答える 1

3

srand()プログラムの開始時に一度呼び出す必要があります(rand()とにかく呼び出しを開始する前のある時点で)。

関数に入るたびに(すばやく連続して)呼び出すことで、シード値を同じものにリセットしているため、重複した数値が表示されます。

プログラムの実行中に時間が新しい秒にクリックされると、異なる数値が表示される場合がありますが、その特定のプログラムは1秒未満で終了する必要があるため、その可能性は低いことに注意してください。

への最初の呼び出しの前に、へのsrand()呼び出しを移動します。main()attack()

于 2012-11-13T04:02:42.383 に答える