思考中rand()函式產生隨機數需不需要srand()的發現
阿新 • • 發佈:2019-02-13
“在程式中每次呼叫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*/