一、首先,介绍一下time()函数,它是定义在<math.h>这个头文件里面。
1.函数原型为:time_t time(time_t *timer)
2.参数说明:timer=NULL得到当前日历时间(从1970-01-01 00:00:00到现在的秒数),time_t是一个 unsigned long 类型。
timer=时间值,用于设置日历时间。如果 timer不为空,则返回值也存储在变量 timer中。
3.函数功能:得到当前日历时间或设置日历时间。
4.函数返回:当前日历时间。
得到系统当前时间的例子如下:
#include <stdio.h>
#include <time.h>
int main()
{
printf("当前的系统时间为:%d\n",time(NULL));
return 0;
}
其次对于产生随机数我们需要知道rand()函数与srand()函数,接下来介绍这两函数
二、rand()与srand()函数包含在<stdlib.h>头文件中
int rand(void)会返回一个[0,RAND_MAX]的随机整数。
void srand(unsigned seed), 参数seed是srand的种子,用来初始化srand()的初始值。
系统在调用rand()之前都会自动调用srand(),如果在srand()里给参数seed指定了一个值(这里指定的值是当前时间),那么 rand()就会将seed的值作为产生伪随机数的初始值;而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始值,如果初始值是此时的1或是其他定值,那么每次rand()产生的随机数序列都是一样的,这就是所谓的“伪随机数”。
值得注意的是,如果srand()括号中没有argument的话,程序是会报错的,因为在函数原型中,srand()函数是要求加上内容的。
若未引用srand()函数,则程序默认srand()括号中的值为1;如果引用的话,srand()括号中不能为空;
为了确保生成的随机数为尽可能符合概率上的随机,需要调用一个函数time(),
下面是随机生成1-6之间的数的例子
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand((unsigned)time(NULL)); //使用当前系统时间作为种子。
for (int i = 0; i < 6; i++)
{
printf("%d\n", rand() % 6 + 1);
}
return 0;
}
/*错误:情况未引用srand()函数,会产生伪随机数。引用了srand()函数括号内不能为空,引用了time没有强制转化为unsigned类型。
另外在开发过程中,我们一般将srand函数写在主函数中。假如需要多次生成新的随机数,不需要频繁的调用srand函数生成种子,需要使用一次srand函数。因为srand函数给它一个初值后,它会自动调用上次的随机的结果作为新的种子。