標(biāo)題: C語(yǔ)言srand和rand用法詳解 [打印本頁(yè)]

作者: 51hei社區(qū)    時(shí)間: 2016-1-16 07:03
標(biāo)題: C語(yǔ)言srand和rand用法詳解
                         今天本來(lái)看數(shù)據(jù)結(jié)構(gòu)的,結(jié)果發(fā)現(xiàn)有這么句話srand(time(0)),注釋是初始化隨機(jī)數(shù)種子,結(jié)果發(fā)現(xiàn)time(0)不解,好像以前看到過(guò),然后網(wǎng)上查了下,發(fā)現(xiàn)了time.h這個(gè)頭文件中有此函數(shù)
typedef long time_t;
time_t time(time_t *);
這個(gè)函數(shù)的返回值和形參都是返回從1970年1月1日0時(shí)0分0秒到現(xiàn)在的秒數(shù),所以用long型,當(dāng)然也可以給形參傳個(gè)NULL
往后看了下,還有幾個(gè)實(shí)用函數(shù)

struct tm * gmtime(const time_t *);
struct tm * localtime(const time_t *);
tm定義成以下結(jié)構(gòu)體
struct tm {
       inttm_sec;   
       inttm_min;   
       inttm_hour;   
       inttm_mday;   
       inttm_mon;   
       inttm_year;   
       inttm_wday;   
       inttm_yday;   
       int tm_isdst;  
       };
看這函數(shù)名一個(gè)是獲取格林威治時(shí)間,另一個(gè)是獲取本地時(shí)區(qū)的時(shí)間
于是寫了個(gè)程序測(cè)了下,還真是如此
time_t timer;
tm *stm;
time(&timer);
stm=localtime(&timer);
然后當(dāng)前的時(shí)間信息就被保存在stm指向的結(jié)構(gòu)體中。

好了回到正題
函數(shù)一:int rand(void);
從srand (seed)中指定的seed開始,返回一個(gè)[seed, RAND_MAX(0x7fff))間的隨機(jī)整數(shù)。

函數(shù)二:void srand(unsigned seed);
參數(shù)seed是rand()的種子,用來(lái)初始化rand()的起始值。

seed如果是固定值,那么每次產(chǎn)生的隨機(jī)數(shù)也是固定不變的,通常的做法是  以這樣一句代碼srand((unsigned)time(NULL));來(lái)取代,這樣將使得種子為一個(gè)不固定的數(shù),這樣產(chǎn)生的隨機(jī)數(shù)就不會(huì)每次執(zhí)行都一樣了。







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1