库函数 rand() 可以帮助我们生产一个随机数字,但是在使用 rand() 函数之前需要用 srand() 函数去设置一个随机起点
【注意:这里如果不用 srand() 函数去设置起点的话,那么每轮 rand() 函数生成的随机数都是一样的,比如 -> 第一轮生成的5个随机数:1、2、3、4、5
第二轮生成的5个随机数:1、2、3、4、5
第三轮生成的5个随机数:1、2、3、4、5】
这个随机起点的参数类型是unsigned int,也就是说要给 srand() 函数一个随机的整型值来作为 rand() 函数的起点才可以,但是我们本来不就是要生成一个随机数么?现在又需要一个随机数起点才能生成另一个随机数,那不是死循环了么...
时间戳 指的就是从 1970 年 1 月 1 日 0 时 0 点 0 分 开始算起,一直到当前时间的总秒数,这段数字就是时间戳,由于时间在不断的前进,所以时间戳也在不断的改变,
这里再顺便说一下 由于以前的计算机操作系统只有 32位 所以时间戳最多间隔时间只能表示 68年,那么也就是说到了2038 便会达到最大时间,过了这个时间点所有的 32位 操作系统就会出现时间回归的现象 ->也就是全部重置为 10000000 00000000 00000000 00000000 很多软件就会出现异常了,
时间回归现象的问题 随着 64位 操作系统的诞生得到了解决,因为64位操作系统可以表示到292,277,026,596年,这个时间在千亿年之后了~
库函数 time() 会返回系统的时间也就是时间戳【使用的时候记得引入头文件 #include
而我们的 srand() 函数需要的参数就是一个 整型参数,那么刚好将 time() 返回的时间戳放到srand() 函数中再将类型 强制转换为 unsigned int 即可,代码如下:
- srand((unsigned int)time(NULL));
- int random = rand() % 100 + 1; //这里 %100 + 1 指的是随机生产1~100之间的数字
完整代码如下所示:
- #define _CRT_SECURE_NO_WARNINGS 1
- #include
- #include
- #include
- #include
- #include
- #include
-
- void menu() {
- printf("************************************** \n");
- printf("******* 1.play 0.exit ******* \n");
- printf("************************************** \n");
- }
-
- int game() {
- int random = rand() % 100 + 1;
- printf("猜数字游戏开始~ 请输入数字~ \n");
- int g = 0;
- int i = 0;
- for (i = 0; i < 3;i++) {
- while (getchar() != '\n') {
- ;
- }
- scanf("%d", &g);
- if (g > random) {
- printf("大了~ 还剩下%d次机会 \n",2-i);
- }
- else if (g < random) {
- printf("小了~ 还剩下%d次机会 \n",2-i);
- }
- else if (g == random) {
- printf("恭喜猜对了~游戏结束 \n");
- break;
- }
- }
- if (i == 3) {
- printf("三次机会用完了~游戏结束 \n");
- }
- }
-
- int main() {
- srand((unsigned int)time(NULL));
- int flag;
- do {
- menu();
- printf("请选择> \n");
- scanf("%d",&flag);
- switch(flag) {
- case 1:
- game();
- break;
- case 0:
- printf("游戏结束~ \n");
- break;
- default:
- printf("只能输入 1 或 0 \n");
- }
- } while (flag != 0);
- return 0;
- }