私のプログラムには、実行するたびにランダムな正の整数を生成するコードが含まれています。乱数を生成しますが、一度だけです。その後、同じコードを実行すると同じ値が得られ、コードが役に立たなくなります。
Rand関数から始めて、srand()関数をtime.hヘッダーファイルと共に使用しましたが、それでもそうではありません正常に動作しています。
#define size 10
for(i=0;i<size;i++)
Arr[i] = Rand()%size;
最初の呼び出し(ランダム):
6 0 2 0 6 7 5 5 8 6
2回目の呼び出し(ランダムだが前と同じ):
6 0 2 0 6 7 5 5 8 6
後でStack Overflowの質問にアクセスし、srand()関数について読んで、次のように使用しました。
#include<time.h>
for(i=0;i<size;i++)
Arr[i] = srand(time(NULL));
最初の呼び出し:
-10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327
2回目の呼び出し:
-10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326
それは私に異なるものを与えています(ランダムな値ではありません)。 Arr [i]をunsigned intと定義しましたが、それでも負の値を取得しています。
srand()
onceを呼び出してシードをランダム化し、ループでRand()
を呼び出す必要があります。
#include <stdlib.h>
#include <time.h>
#define size 10
srand(time(NULL)); // randomize seed
for(i=0;i<size;i++)
Arr[i] = Rand()%size;
Rand()の前にrandomize()を呼び出して、ランダムジェネレーターを初期化してください。
(見てください: srand()—なぜ一度だけ呼び出すのですか? )
srand
を選択した場合は、Rand()
を使用する前に少なくとも1回呼び出すことをお勧めします。これは、恐ろしい原始的な擬似乱数ジェネレータの一種です。スタックオーバーフローの質問なぜRand()%7は常に0を返すのですか?を参照してください。
srand(time(NULL));
Rand();
//Now use Rand()
利用可能な場合は、random
またはarc4Rand
の方がいい。