找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3860|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

C語(yǔ)言srand和rand用法詳解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:102668 發(fā)表于 2016-1-16 07:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
                         今天本來(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í)間
于是寫(xiě)了個(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開(kāi)始,返回一個(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í)行都一樣了。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表