2013-03-15 107 views
0

僅供參考,我遵循此thread自定義rand()函數返回相同的值

我請從main()功能此功能,其在範圍[0, N]返回一個隨機值:

int randr(int min, int max) { int r = (rand() % (max+1-min)+min); return r; } 

例如:

int main() 
{ 
unsigned int r=128; 
while(r--) 
{ 
    int a = randr(0, 63); 
    int b = randr(64, 127); 
    printf("%d %d\n", a, b); 
} 
return 0; 
} 

的問題是,每次執行該程序時,可變ab總是包含相同的生成值,爲什麼(我的意思是printf總是和終端上的數據相同)

+0

任何C隨機數教程將給出答案。 – chris 2013-03-15 03:55:30

+1

你需要在使用rand()之前設置你的隨機種子。 – taocp 2013-03-15 03:56:30

+3

可能的重複[爲什麼我總是用rand()函數得到相同的隨機數序列?](http://stackoverflow.com/questions/1108780/why-do-i-always-get-the-same-sequence隨機數與蘭特) – Blastfurnace 2013-03-15 03:59:41

回答

4

rand手冊頁:

rand()功能的範圍內返回一個僞隨機整數0至RAND_MAX 包容(即,數學範圍[0, RAND_MAX])。

srand()函數將其參數設置爲要由rand()返回的僞隨機整數的新序列的種子。這些序列可通過 重複調用srand()具有相同的種子值。

如果沒有提供種子值,該rand()功能會自動的1

最後一句一個 的種子值是特別重要。使用相同的種子,您將始終獲得相同的僞隨機數序列。而且由於你沒有明確地使用srand(),你的種子總是1.

0

只要種子是相同的蘭德會產生相同的序列。

1

你必須爲隨機序列播種每次都有不同的東西。

最常用的是srand((unsigned)time(NULL));