2017-12-21 4 views
0

Iはアレイのための乱数発生器(100〜1)を作成したが、私はそれを実行するたびに、ループが10回実行さ1から100C++乱数

for (int x=0; x < 10; x++) { 
     arr[x]=rand() % 100 + 1; 

間で同じ10個の数字を出力します配列には10個の整数が含まれているためです。私もこれを実行するたびに、それは出力:42、68、35、1、70、25、79、59、63、65

のコード行から

それを出力

for (int z=0; z<10;z++) { 
     cout << arr[z]<<", "; 
} 

は誰でもできこれがなぜ起こっているのかを見てください。

+1

プログラムは毎回同じシードを使用します。 – Carlos

+1

あなたはいつでも 'srand'を呼び出していますか? –

+1

"これはなぜ起こっているのですか?あなたがドキュメントを読んで気にしないので、http://www.cplusplus.com/reference/cstdlib/rand/ – Slava

答えて

0

rand()を使用すると、指定された入力から同じシーケンスがsrand()に生成されます。別の言葉では、通常、初期シード値から生成された同じ数値を使用します。これらの関数は、使用時にぶつかると考えられ、擬似乱数ジェネレータライブラリのためにdeprecatedとマークされることを望むものもあります。

乱数を生成するには、代わりに<random>ヘッダーのライブラリを使用してみてください。

ここにドキュメントがあります:cppreference::random

+0

最初の文は明瞭ではありません - 設計上、 'rand'は' srand'に特定の入力が与えられた場合、常に同じシーケンスを生成します。 –

+0

@OliverCharlesworth true;私は ''ライブラリのより良い使い方を強調しようとしていました。 –