2011-02-12 99 views
0

可能重複:
how to generate different random number in a loop in C++? 這段代碼爲什麼會產生總是產生相同數字的隨機數字?

在此代碼:

int Randtest(int len) 
{ 
    int test[100]={}; 
    for(int i=0;i<len;i++) 
    { 
     srand (time(NULL)); 
     cout <<(test[i]=rand()%10); 
    } 
} 

int main() 
{ 
Randtest(8); 
} 

輸出將總是重複數的序列,像2222222211111111或。我如何讓它產生八個隨機數字?

+2

這個問題已被問了100萬次。確切的重複。 – abelenky 2011-02-12 01:56:39

回答

6

與您的代碼的問題是在這裏:

for(int i=0;i<len;i++) 
{ 
    srand (time(NULL)); 
    cout <<(test[i]=rand()%10); 
} 

的問題是,在每次循環,你補種與當前系統時間的隨機數發生器,通常在第二精密測量。每次向隨機數發生器提供一個種子時,它將重置隨機數的順序,如果您一直重複使用相同值的隨機數發生器,並且每次重新輸入時只調用一次rand,我會一遍又一遍地得到相同的隨機數字序列。由於系統時間每秒僅改變一次,因此這將重複產生相同的數字序列。

爲了解決這個問題,將調用srand圈外的,因爲在這裏看到:

srand (time(NULL)); 
for(int i=0;i<len;i++) 
{ 
    cout <<(test[i]=rand()%10); 
} 

這樣,你是唯一的種子隨機數發生器一次,所以你的順序應該看起來更加僞隨機的。你仍然可以看到一些重複的值,但這將是偶然的,而不是隨機數發生器確定性地起作用。

+0

thnx的解釋 – Abanoub 2011-02-12 01:59:49

0

在循環的每次迭代中,退出重複種植的值相同。只需在main中完成。

2

srand在當前時間啓動隨機數發生器,由time(NULL)給出。

您的循環運行速度非常快,以至於時間不會更改循環中的每次循環,並且您會將您的隨機數發生器重置爲相同的起點。

答:使用srandONCE只有一次,循環。

相關問題