1.rand()函数用法
定义:int rand(void);
作用:返回一个介于0~32767之间的伪随机整数
需要注意的是:rand()所返回的整数由算法生成,经过多次调用该算法会根据种子的值生成一个数字序列。也就是说,只要种子的值不变,rand()函数所生成的数字序列总是相同的。
那么,如何改变种子的值呢?
这里我们引入srand()函数,srand()是一个伪随机数生成器,可以初始化seed的起始值
#include <stdlib.h>
void srand(unsigned int seed);
如果我们没有手动设置种子的值,系统会默认种子值为1,即自动调用srand(1)一次,那么想要生成一个随机数,只需要把种子值设为一个随机数即可。
2.时间戳的概念及time()函数用法
时间戳
定义:时间戳是指格林威治时间自1970年1月1日(00:00:00 GMT)至当前时间的总秒数。通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据
time()函数
#include <time.h>
time_t time(time_t *time_ptr);
作用:用于获取当前系统时间的时间戳
其中,time_ptr是一个指向time_t的指针,如果不需要返回指针,可以将它设置为NULL,如果出现错误,time函数将返回-1。
因为系统时间是在时刻变化的,所以把种子值设为time(NULL)即可得到一个随机数。由于time()函数返回值的类型为time_t,而srand()的参数值类型为 unsigned int ,因此需要强制转换一下。
添加了srand((unsigned int)time(NULL));
之后,当你再次运行该段代码时,你就会发现,每次生成的随机数就不同了。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand((unsigned int)time(NULL));
int ret = rand();
for (int i = 1; i <= 5; i++)
{
printf("%d\n", rand());
}
return 0;
}
3.猜数字游戏
以下是根据本篇知识做的简单小游戏,感兴趣的朋友可以试玩一下
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int numbergame()
{
int ret = (rand()+1)%100;
printf("请输入一个数字:");
int guess;
while (1)
{
scanf("%d", &guess);
if (guess < ret)
printf("猜小了\n");
else if (guess > ret)
printf("猜大了\n");
else
{
printf("恭喜你猜对了!\n");
printf("请选择继续或退出游戏:");
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));
printf("欢迎来到猜数字游戏!请选择:\n");
printf("---输入1进入游戏,输入0退出游戏---\n");
int input;
do
{
scanf("%d", &input);
switch (input)
{
case 1:
numbergame();
break;
case 0:
printf("欢迎下次使用。");
break;
}
} while (input);
return 0;
}