2016-11-04 8 views
-1
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int dorand(){ 
int i; 
srand(time(0)); 
i = rand()%3+1; 
return i; 
} 

int main(){ 
printf("\n %d \n", dorand()); 
printf("\n %d \n", dorand()); 
printf("\n %d \n", dorand()); 
printf("\n %d \n", dorand()); 
return 0; 
} 

問題は4つのprintfが同じ番号を出力しています。 私はrand()をmain関数で直接実行すると何の問題もありませんが、関数を呼び出すとランダムな世代が同じ数に依存します。誰かが共有するいくつかの経験がありますか?rand()の数値はCの関数に依存しています

は、私が試してみた:

int main(){ 
srand(time(0)) //seeding in the main function before calling the dorand function 
printf("\n %d \n", dorand()); 
printf("\n %d \n", dorand()); 
printf("\n %d \n", dorand()); 
printf("\n %d \n", dorand()); 
return 0; 
} 

また

int dorand(){ 
int i; 
i = 0; //clearing the variable before attributing a new rand value 
srand(time(0)); 
i = rand()%3+1; 
return i; 
} 

申し訳ありませんが、私は何かを間違えた場合は、

+1

シードをリセットしたままにしておきます。 –

+2

すべての関数呼び出しでシードを変更しないようにしてください。この 'srand(time(0));をmain(または他の場所)で1回だけ呼び出してみてください。 – jamesjaya

+0

働いて、ありがとうたくさんの男 –

答えて

0

srand機能種子乱数ジェネレータを助けてくれてありがとう。与えられたシード値に対して、同じ乱数セットが生成されます。

現在の時間をシードとして使用して乱数を入力するたびに、再度シードするので、関数の各呼び出しが同じ秒で発生すると仮定すると、乱数関数には同じ値が設定されます。同じ "ランダムな"番号を取得します。

プログラム開始時にsrandに一度だけ電話する必要があります。電話をdorandから削除し、それをmainの上部に置きます。

関連する問題