0
rand()を使用して乱数/文字を作成しようとしていますが、呼び出されるたびに同じ番号/文字が返されます。乱数生成器 - 毎回乱数を生成しない
void Location::pick() {
srand(time(NULL));
x = rand() % fieldSize + 1;
int locy = rand() % fieldSize + 1; // rand y
switch (locy) {
case 1: y = 'a'; break;
case 2: y = 'b'; break;
case 3: y = 'c'; break;
case 4: y = 'd'; break;
case 5: y = 'e'; break;
}
}
は、fieldSizeは私が上にsrand関数()を使用して5に設定されています。以下は私が関数と呼ぶ場所です。
void Fleet::deployFleet() {
bool newLoc = true;
Location tmp;
for (int i = 0; i < fleetSize; i++) {
tmp.pick();
ships[i].setLocation(tmp);
}
}
fleetSizeは5に設定されています。ships []は5つの船舶の配列です。 setLocation()は、船の位置を指定されたパラメータに設定するだけです。
特に 'rand()%n'ではなく、' rand() 'を使わないでください。もっと読む[ここ](http://www.azillionmonkeys.com/qed/random.html)代わりに 'srand'とtimeをパラメータとして使います。 –
コードが再オープンされて少し異なります。関連性が高い:http://stackoverflow.com/questions/37701567/calling-a-random-number-generating-member-function-doesnt-produce-entirely-rand – NathanOliver
このコードについてのすべてが壊れている。シードとして 'time(NULL)'を使い、 'rand()'を使って '%'を使って数値の範囲を制限する複数のシード。...どこから始めるべきか分からない。 – nwp