标题: C语言srand和rand用法详解 [打印本页]

作者: 51hei社区    时间: 2016-1-16 07:03
标题: C语言srand和rand用法详解
                         今天本来看数据结构的,结果发现有这么句话srand(time(0)),注释是初始化随机数种子,结果发现time(0)不解,好像以前看到过,然后网上查了下,发现了time.h这个头文件中有此函数
typedef long time_t;
time_t time(time_t *);
这个函数的返回值和形参都是返回从1970年1月1日0时0分0秒到现在的秒数,所以用long型,当然也可以给形参传个NULL
往后看了下,还有几个实用函数

struct tm * gmtime(const time_t *);
struct tm * localtime(const time_t *);
tm定义成以下结构体
struct tm {
       inttm_sec;   
       inttm_min;   
       inttm_hour;   
       inttm_mday;   
       inttm_mon;   
       inttm_year;   
       inttm_wday;   
       inttm_yday;   
       int tm_isdst;  
       };
看这函数名一个是获取格林威治时间,另一个是获取本地时区的时间
于是写了个程序测了下,还真是如此
time_t timer;
tm *stm;
time(&timer);
stm=localtime(&timer);
然后当前的时间信息就被保存在stm指向的结构体中。

好了回到正题
函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。

函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。

seed如果是固定值,那么每次产生的随机数也是固定不变的,通常的做法是  以这样一句代码srand((unsigned)time(NULL));来取代,这样将使得种子为一个不固定的数,这样产生的随机数就不会每次执行都一样了。







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1