2017-02-15 83 views
2

我正在用rand()函數在C中做一個簡單的例子,但函數總是返回相同的數字,儘管我使用的是srand()。rand()返回相同數

這是代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int generate(int min, int max) 
{ 
    srand(time(NULL)); 
    return rand() % (max - min + 1) + min; 
} 

int main() 
{ 
    int i; 
    for (i = 0; i < 10; i++) 
    { 

     printf("Number random %d = %d\n", i, generate(1, 100)); 
    } 

    return 0; 
} 

執行:

數隨機0 = 40號隨機1 = 40號隨機2 = 40號 隨機3 = 40號隨機4 = 40隨機數5 = 40隨機數 6 = 40隨機數7 = 40隨機數8 = 40隨機數9 = 40

+2

你不應該強制每次使用新的種子。你應該在應用程序啓動時使用''srand'',而不是每次都使用。順便說一句,你應該考慮使用''''而不是老派的''rand''。 –

+1

嘗試初始化您的主要功能開始的一次隨機數 – flotto

+0

謝謝,它的工作原理! –

回答

4

這是因爲你每一次補種它,併爲您的程序可能運行速度非常快,你的種子值(time())對於每次調用都是相同的,因爲它的最小增量是1秒。

嘗試移動srand()main()代替,並稱之爲一次

1

反覆調用srand將遺漏發生器的統計屬性。

稱它不超過一次。

(所觀察到的行爲是由time(NULL)返回在循環的每次迭代相同的值造成的。)