找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3838|回复: 0
打印 上一主题 下一主题
收起左侧

C语言srand和rand用法详解

[复制链接]
跳转到指定楼层
楼主
ID:102668 发表于 2016-1-16 07:03 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
                         今天本来看数据结构的,结果发现有这么句话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));来取代,这样将使得种子为一个不固定的数,这样产生的随机数就不会每次执行都一样了。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表