2016-11-04 19 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; 
} 

問題是:四個printf打印的是相同的數字。 當我直接在主函數中執行rand()時,根本沒有任何問題,但是當我調用一個函數時,隨機生成會沉迷於相同的數字。請有人分享一些經驗嗎?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(或其他地方)。 – jamesjaya

+0

工作,感謝很多傢伙 –

回答

0

srand功能種子的隨機數發生器。對於給定的種子值,生成相同的一組隨機數。

由於您每次需要一個隨機數時重新播種,使用當前時間作爲種子,假設每次調用該函數都發生在同一秒內,隨機數函數會播種相同的值,因此您應該保留獲得相同的「隨機」數字。

您應該在程序開始時只撥打srand一次。從dorand中刪除呼叫,並將其置於main的頂部。