程序要求:
1、自动产生一个1-200之间的随机数字
2、猜对了:恭喜,猜对了! ->游戏结束;猜错了:提示猜大了/猜小了 ->游戏继续
3、游戏可以一直玩,除非退出游戏。
程序代码:
//头文件 #include <stdio.h> #include <stdlib.h> #include <time.h> //菜单打印函数 void guess_num_menu() { printf("************************************************************************\n"); printf("************************************************************************\n"); printf("************************** 1.开始游戏 **************************\n"); printf("************************** 0.退出游戏 **************************\n"); printf("************************************************************************\n"); printf("************************************************************************\n"); } //猜数字函数 void guess_num_game() { int guess_num = 0; int random_num = (rand() % 200) + 1; //生成随机数0-200,+1后范围即为1-200 while (1) { printf("请输入猜测数字:>"); scanf("%d", &guess_num); if (guess_num < random_num) { printf("猜小了,继续加油!\n"); } else if (guess_num > random_num) { printf("猜大了,继续努力!\n"); } else { printf("恭喜,猜对了!\n"); break; } } } //主函数 int main() { int option_num = 0; srand((unsigned int)time(NULL)); //这里不需要使用time的返回函数,所以这里time(NULL) ->>即返回空值 //time的类型为time_t,而srand的返回类型为unsigned int。因此将time类型强制转换为“unsigned int” guess_num_menu(); do { printf("请选择:>"); scanf("%d", &option_num); switch (option_num) { case 1: guess_num_game(); break; case 0: printf("游戏退出成功!\n"); break; default: printf("输入错误,请重新输入!\n"); break; } }while (option_num); return 0; }
程序分析:
1、由于程序要求产生一个1-200的随机数字。因此我们使用一个可以生成随机数的函数rand,rand函数可以生成一个0-RAND_MAX(即0-32767)之间的数字(rand需要调用stdlib.h头文件)
2、rand函数要求,在调用rand之前需要使用srand(随机数发生器初始化函数)为生成一系列伪随机数设置一个起点。
3、当srand的形参为固定值时,产生的随机数是不会变化的。例如设置为:srand(100),这时不管什么时候,程序生成的随机数都是固定的。因此srand的形参需要是一个会变的量。
4、因此我们给srand传入一个会发生变化的值:时间戳->使用库函数time()
5、之所有把srand放到主函数内,而不是放到猜游戏的函数内。是因为srand放到猜游戏函数内的话,时间戳是一直在变化的。那每猜一次数字,都会给rand重新设置一个起点。这样每猜一次都会生成一个随机数,那这样随机数是一直在变化的,永远都不可能猜对。
6、程序要求游戏一直能玩,因此do...while()循环的while()形参设置成游戏的选项部分。当选择“退出游戏”时,会传入一个0给while。0为假,就可以退出循环。反之,非0为真,则循环一直在运行,游戏就可以一直玩。