1. 程式人生 > >思考中rand()函式產生隨機數需不需要srand()的發現

思考中rand()函式產生隨機數需不需要srand()的發現

“在程式中每次呼叫rand()產生的數字都相同”這是不對的!!

要知道為什麼不對,還是先說明一下rand()函式吧,rand()函式是會用系統提供的種子(沒有用srand()提供時)或者srand()提供的種子計算出一組隨機數,嗯,是一組!而不是一個!!可以把這一組數看做是儲存在一個數組裡,如果這個陣列名字叫做A,那麼第一次輸出rand()產生的隨機數會輸出A[0],第二次輸出就是A[1],以此類推。

所以,因為用種子產生的是一組隨機數,所以,在程式中每次呼叫rand()就是把這個陣列中的書一個個顯示出來,肯定就是一系列不一樣的數。這就解決了我不用srand()也可以產生一組隨機數的問題。

大家口中說的

不用srand()每次產生的隨機數就一樣”,意思是,這一組隨機數一樣所以用srand(time(0))來使每次程式執行時的種子不一樣,產生的隨機陣列不一樣。

#include <stdio.h>
#include <stdlib.h>
//回撥函式
void callback_array(int *array,int  m,int(*getNextRandomValue)(void)){
    int i;
    for(i=0;i<m;i++){
        array[i]=getNextRandomValue();
     }
}
//獲取隨機值
int getNextRandomValue(void){
    //srand((unsigned)time(NULL));
    return rand();
}
int main(void)
{
    int array[10],i;
    callback_array(array,10,getNextRandomValue);
    for(i=0;i<10;i++){
        printf("%d\n",array[i]);
    }
    printf("\n");
    return 0;
}

/*文章轉自http://www.cnblogs.com/geekgao/p/4476971.html*/