C语言编写“猜数字”小游戏
猜数字小游戏主要是随机数比较复杂
下面主要讲解关于随机数:
- rand()函数需要的头文件是:<stdlib.h>
- rand()函数原型:int rand(void);
- 使用rand()函数产生1-100以内的随机整数:int number = rand() % 100+1;
- 生成随机数需要调用rand()函数,在调用rand()函数之前,要先使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动生成随机数种子为1。随机种子相同,每次产生的随机数也会相同。
- 使用srand()函数时,要有随机种子参数,但若是写一个数字,例如srand(100)那么生成的随机数是还是相同的,因为是相同的随机种子,说明srand()括号里还需要一个随机数,这时候我们可以用时间戳,srand(time(0)),time函数的头文件是<time.h>,类型是time_t;
srand的类型是unsigned int,这时候类型不同,我们可以设置强制转换,正确写法srand((unsigned int)time(null))传入一个空指针,因为程序中往往并不需要经过参数获得数据 - 程序中把随机值srand写在主函数里,循环外部,是因为,每次我们进入game,都会给一个初始值(即当前时间),srand((unsigned)time(NULL))应当放的地方离rand“远一点”,即两句执行的间隔大点,比如不要把srand和rand同放在一个循环里,如果放在一个循环里,上下语句挨着,这样时间上基本没变,所取的种子是相同的,所以结果打印一般都一样,也并不能起到随机数的效果。因此随机数srand放在主函数里,rand放在game()里,每次只用进一次main函数,只有一次初始值,之后产生不同随机值,计算机获取当前时间生成随机数,两条语句隔的远,时间不会那么近。
生成的随机数在0–32767之间,这是定义的,每次我们想要什么数,就对什么取余,要1–100之间的数字,那么rand()%100+1,对100取余,那么余数肯定是在0-99之间,在+1,那么就是1–100了
//思路--先有游戏菜单--然后选择开始游戏,或者退出--开始之后设置随机数--然后开始猜测比较
void menu() {
printf("<--------猜数字小游戏 ---------->\n");
printf("<---------- 1.play ------------>\n");
printf("<---------- 0.exit ------------>\n");
printf("<--------数字在0--100之间------->\n");
}
void game() {
//生成的随机数在0--100之间
int ran = rand()%100+1;
int guess;
while (1) {
printf("请输入数字\n");
scanf_s("%d", &guess);//输入自己要猜的数字
if (guess > ran) {
printf("你猜大了\n");
}
else if (guess < ran) {
printf("你猜小了\n");
}
else {
printf("你猜对了!\n");
break;
}
}
}
int main() {
int input = 0;
//生成随机数 把随机数放在循环外面,只用设置一次初始值
srand((unsigned int)time(NULL));
do {
menu();//调用菜单函数
printf("请选择->\n");
scanf_s("%d",&input);//这里用户根据菜单提示输入数字
switch (input) { //分支语句进行判断
case 1:
printf("开始游戏\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default: //如果输入其他值
printf("输入错误,请重新输入\n");
break;
}
} while (input); //input是用户根据菜单输入的数字,如果为0,那么退出,否则,继续循环
return 0;
}