srand()
を最初に呼び出すことなくrand()
に電話すると、srand(1)
が暗黙的に呼び出されたかのように動作します。標準C99 7.20.2.2 The srand function
の関連ビット(cstdlib
が基づいている)状態:
srand関数への呼び出しが行われた前のランドが同じ配列がsrand関数は、最初のシードと呼ばれたときのように生成されなければならない、呼び出された場合
つまり、はになるたびに同じシーケンスが得られます。あなたが二回以上、それを実行しないと仮定すると、この問題を解決するために
int main (int argc, char* argv []) {
srand (time (0)); // needs ctime header.
for (int i = 0; i < 5; i++)
cout << random (2, 5) << endl;
wait();
}
:あなたはあなたの中にmain
を変更することができます。
前述のとおり、ctime
ヘッダーが必要です。 rand
とsrand
が住んでいるので、cstdlib
にも引き込む必要があります。また、XXX.h
ヘッダー(math.h
ではなくcmath
など)ではなく、cXXX
ヘッダーを使用することをお勧めします。 (他の人がいないかもしれないが、私が好む、明示的な名前空間を使用して)、私は終わるだろう
ので、すべてそれらの変更をした:異なるシーケンスを毎回与え
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
void wait() {
int e;
std::cin >> e;
}
int random (int low, int high) {
if (low > high) return high;
return low + (std::rand() % (high - low + 1));
}
int main (int argc, char* argv []) {
std::srand (std::time (0));
for (int i = 0; i < 5; i++)
std::cout << random (2, 5) << '\n';
wait();
}
Iとにかくそれを数回実行してください。明らかに、データがいつ繰り返されるかについての厳しい制限があります(実際にはの可能性があります)。出力の「ランダム」性質は、それ以前にも繰り返される可能性があります:-)
Nit:数学的には、「よりランダム」にはなりません。 –
trueですが、OPの質問の文脈で...(プラス引用符で囲まれています;-) – John3136