猜数小游戏的关键在于生成随机数
rand是生成随机数的函数int rand(void)(返回值为整形,无参数)头文件<stdlib.h>
RAND_MAX = 0x7fff(16进制) 换算成十进制的结果为32767,也就是rand生成的随机数的范围是在[0,32767]之间,但是使用rand函数会发现每次程序运行所生成的结果都是一样的
解决随机数每次都出现一样的问题
在使用rand函数之前需要使用srand函数去设置rang函数生成随机数
srand函数为设置随机起点,void srand(nusigned int seed),头文件<stdlib.h>
srand需要整形,假设为srand(6);
结果:
程序单次运行的结果都是是一样的
可以看出srand函数的也需要一个随机数,rand函数才能随之生成随机数,rand函数生成的随机数又需要srand函数来设置随机起点,而srand函数设置随机起点又需要随机函数!#¥%&*@!¥%¥ ……
显然,这种方法行不通,套娃会陷入死循环
所以这里是使用时间戳
时间戳 = 当前计算机的时间 - 计算机的起始时间1970/01/01 00:00:00=(xxxx)秒 使用时间戳来作为srand函数的随机起点,就可以让srand函数生成随机起点(好像是废话)
time函数,time_t time(time_t *timer),头文件<time.h>
time_t其实就是长整型
srand((unsigned int)time(NULL));
因为void srand(nusigned int seed)需要unsigned int参数,所以将time函数的值强制类型转换,转变成unsigned int,让srand的参数变成时间戳,srand就可以生成随机起点,rand随即生成随机数
至此随机数的生成问题解决了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68#include<stdio.h> #include<stdlib.h> #include<time.h> void menu()//定义menu函数 { printf("#################################n"); printf("#################################n"); printf("### 1. play 0. exit ###n"); printf("#################################n"); printf("#################################n"); } //RAND_MAX 0x7fff-32767 void game()//定义game函数 { int ret = 0;//随机数 int guess = 0;//猜数 printf("猜数字游戏开始^-^n"); ret = rand() % 100 + 1;//生成随机数,rand取值范围[0,32767],模100再加上1后范围[1,100] //printf("%dn", ret);//打印随机数 while (1)//一直循环,直到最后else打印然后break跳出循环 { scanf("%d", &guess);//输入猜数 if (guess > ret)//如果猜数大于随机数 { printf("猜大了,再试一次n:>");//打印 } else if (guess < ret)//如果猜数小于随机数 { printf("猜小了,再试一次n:>");//打印 } else//否则 { printf("恭喜你,猜对了 ^-^n");//打印 break;//并退出循环 } } } int main()//主函数 { int x=0;//选择数字 srand((unsigned int)time(NULL));//(unsigned int)强制类型转换,转换成srand需要的类型 //主函数中调用,不用放在game函数中每次都使用 //时间戳=当前计算机的时间减去计算机的起始时间1970/01/01 00:00:00=(xxxx)秒 //用时间戳设置随机数的生成起点 //time_t 本质上是长整型 do//执行循环 { menu();//menu函数 printf("请输入数字选择:>"); scanf("%d", &x);//输入数字选择 switch (x)//1,play 2,exit //switch选择语句从上往下执行遇到break跳出循环 { case 1: game();//game函数 break;//跳出 case 0: printf("退出游戏"); break;//跳出 default: printf("输入错误,请重新输入n"); break;//跳出 } } while (x);//非0即为真,当x属于case 1或default时x大于等于1,while继续循环。 //当x等于0时则为假,while结束循环。 return 0; }
最后
以上就是外向仙人掌最近收集整理的关于猜随机数小游戏的全部内容,更多相关猜随机数小游戏内容请搜索靠谱客的其他文章。
发表评论 取消回复