一、题目描述
给你生成一个1~100的数,你需要不断输入另一个数字来判断生成的数字是多少,输入的数大于生成的数,提示猜大了,小于,提示猜小了,输入正确,提示猜对了,并退出循环
二、准备工作,引入生成随机数的头文件
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
三、内容组成
(1)生成随机数
c语言提供了rand函数生成随机数,随机数范围在0~RAND_MAX之间,这个RAND_MAX在大部分编译器上是32767,而题目要求在1~100之间(需使用头文件stdlib.h)
//函数原型,此段代码不写入程序中,仅作介绍
int rand(void);
//可以在另外的项目中试试运行两次以下代码,会发现两次运行结果一样
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
//所以需要srand函数初始化rand函数
srand函数用来初始化随机数的生成器
void srand(unsigned int seed)
//通过seed参数来设置rand函数生成随机数的种子
//意思是只要参数seed是随机的,那么rand生成的数就是真正的随机的
//即生成随机数B需要另一个随机数A,(A在seed的位置上)
//那么另一个随机数又如何获取?
引入time函数,需要头文件<time.h>
程序运行的时间是时刻发生变化的,符合随机,C语言中time函数可以获得这个时间
函数原型如下
time_t time(time_t*timer);
//time_t是一种数据类型,通常是32位的整型或64位的整型类型
如果timer是非NULL指针的话,函数会将这个返回的差值放在timer指向的内存中带回去。
如果time是NULL,就只返回这个时间的差值。time返回的这个时间差也被叫做:时间戳
(2)游戏玩法部分
首先游戏开始菜单界面设计
自定义名称为menu的函数
void menu()
{
printf("************************\n");
printf("********* 1.start********\n");
printf("**********2.exit********\n");
printf("************************\n");
}
游戏部分
void game(){
int ret=rand()%100+1;//接收随机数的值
//如果是ret =rand(),则说明返回的随机数范围在0~32767之间
//如果是ret=rand()%100,则说明返回的是0~99之间的数,因为任何数%100都只有两位数,
//例如1563298%100==98
//如果rand()%100+1就意味着返回数在1~100范围内
int guess=0;//初始化,后面会重新输入值
int count=5;//假设你给自己有5次机会
while(count){
printf("请输入你要输入的数字");
scanf("%d",&guess);
if(guess>ret){
printf("猜大了");
}
else if(guess<ret){
printf("猜小了");
}
else {
printf("猜对了");
break;
}
count--;//执行完if语句后,意味着你用了一次机会,所以count--
}
if(count==0){
printf("次数用完,正确的数字为%d\n",ret);
}
}
(3)主函数部分
int main(){
int input=0;//初始化input
srand((unsigned int)time(NULL));
do{
menu();
printf("请选择:");
scanf("%d",&input);
switch(input)
{
case 1:
printf("你输入%d,游戏开始",input);
game();//进入game函数
break;//游戏运行完,退出switch
case 0:
printf("你输入%d,游戏退出\n",input);
break;
default:
printf("输入1或0以外的数字,选项选择错误\n");
break;
}
}while(input);
return 0;
}