12.猜数字游戏
游戏玩法:游戏开始,计算机会生成一个数字,玩家随机输入一个数字(1~100),计算机会根据玩家输入的数字和要猜测的数字之间的关系,提供一些信息来进行提示,以缩小猜测范围
基本思路:
-
生成一个随机数
-
猜数字
#include <stdio.h>
#include <stdlib.h>//使用rand()函数、srand()函数需要引用
#include <time.h>//使用time.h函数需要引用
void menu()
{
printf("****************************\n");
printf("***** 1.play 0.exit ******\n");
printf("****************************\n");
}
//写一个函数制定游戏规则
void game()
{
//1.生成一个随机数
int ret = 0;
int guess = 0;//接收猜测的数字
//拿时间戳来设置随机数的生成起点
//时间戳:当前计算机的时间-计算机的起始时间(1970.1.1.0:0:0)
ret = rand() % 100 + 1;//生成1~100之间的数
//2.猜数字
while (1)//设定猜中继续猜
{
printf("请猜数字(1~100):>");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
//srand设置的随机数生成起点,在整个代码里设置一次就可以了
//所以把这个语句从menu函数中拿出来,放到主函数中,整个工程就调用一次即可
do
{
menu();//调用menu函数
printf("请选择>:");
scanf("%d", &input);
switch (input)
{
case 1:
game();//输入1后调用game函数,开始游戏
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
}
} while (input);//输入0后,推出程序,否则再循环一次
return 0;
}
rand()函数
-
一个生成随机数的函数,头文件时stdlib.h
rand函数会返回一个随机整数,这个整数的范围在0~RAND_MAX(0x7fff);0x代表十六进制, 转换成十进制就是32767
-
调用rand之前要先调用srand——设定一个随机起点;
srand(); 括号内需要是整型
若括号内输入1,rand将一直生成41,无法达成随机的效果,所以往srand中输入一个会变化的数
而时间戳①满足这一点
-
time函数——用于获取系统的时间
-
time的参数类型是time_t,编译器中转到定义可以发现time_t是对_time32_t的重命名,而_time32_t是对long的重命名,即long int长整型
而srand的参数刚好需要整型(无符号整型,所以还是要强制类型转换一下)
-
srand(unsigned int seed);
所以将time函数的返回值的类型强制转化成unsigned int
-
time(time t*timer);
括号内是一个指针,这里我们往里面放NULL,所以最终写成srand((unsigned int)time(NULL));
-
NULL是空指针
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
goto语句
C语言中提供了可以滥用的goto语句和标记跳转的符号,理论上goto语句是没有必要的,实践中没有goto语句也可以轻易写出代码
-- -- -- -- -- -- -- -- -- --
#include <stdio.h>
int main()
{
printf("hello world\n");
goto again;
printf("你好\n");
again:
printf("再见\n");
return 0;
}
运行结果:
hello world
再见
-
goto语句会打乱程序原有执行节奏,建议少用
-- -- -- -- -- -- -- -- --
但这样并不是意味着goto语句一无是处。goto可以一次性跳出多层循环,而break就不行,break一次只能跳出一层循环,从而达到终止程序在某些深度嵌套的结构的处理过程
for(...)
for(...)
for(...)
if(diaster)
goto error;
}
}
...
}
-- -- -- -- -- -- -- -- --
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char input[20] = { 0 };
//shutdown -s -t 60:电脑会在60s后关机
//system()——执行系统命令,头文件是stdlib.h
system("shutdown -s -t 60");
again:
printf("请注意,你的电脑会在1分钟后关机,如果输入“我是猪”就取消关机\n请输入>:");
scanf("%s", &input);
if (strcmp(input, "我是猪") == 0)//两个字符串相等返回0
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
*不输入“我是猪”电脑真的会关机,建议保存好电脑当前资料再尝试!!!
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
附
①