猜数字游戏

时间:2022-12-03 13:59:57

前言:

在介绍猜数字游戏时,上一篇博客忘记写了,我们先来了解一下goto语句

1.goto语句

忠告:慎用goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。

例如:一次跳出两层或多层循环。

多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。 goto语言真正适合的场景如下:适用于多层循环跳出

for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}

error:
if(disaster)
// 处理错误情况

1.1 一个有意思的小程序--关机程序

1.1.1 使用goto语句实现

代码解释:input数组用来接收输入值,system("shutdown -s -t 60");是执行系统命令(需要引入stdlib.h头文件),这个again和goto语句搭配使用,当程序执行了goto语句后会直接跳转到again处,从而实现了次代码的循环

//关机代码
int main()
{
char input[20] = { 0 };//用来接收输入值
system("shutdown -s -t 60");//shutdown -s -t 60关机命令,这个是执行系统命令
again:
printf("你的电脑将在一分钟之内关机,如果输入:我是猪,将取消关机\n请输入:");
scanf("%s",&input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");//shutdown -a取消关机命令
}
else
{
goto again;//直接跳转到again那里
}
return 0;
}

猜数字游戏

1.1.2 使用普通循环

这里将again和goto语句搭配实现的循环功能,直接替换成了while(1)死循环,利用break跳出循环

//关机代码
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");//shutdown -s -t 60关机命令
while (1)
{
printf("你的电脑将在一分钟之内关机,如果输入:我是猪,将取消关机\n请输入:");
scanf("%s", &input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");//shutdown -a取消关机命令
break;
}
}
return 0;
}

猜数字游戏

2.猜数子游戏

在这里特别说明一个知识点

生成一个随机数用rand()函数,但是如果需要每次生成随机数都不一样,就需要rand()需要调用srand()函数随机数生成器(srand(参数)参数不同可以生成不同的随机数),而srand()需要调用(unsigned int)time(NULL)(时间戳)保证srand()生成不同得随机随机数

即srand((unsigned int)time(NULL))需要放在主函数才行,只用调用一次,如果每次玩游戏都调用一次反而生成的数不太随机,所以放在主函数main中

2.1 主函数main

首先是个主函数main,这里得主要功能是实现函数得调用,首先使用do while

循环语句来控制用户的选择输入,从而实现不同的功能

int main()
{
int input = 0;
srand((unsigned int)time(NULL));//为了是rand()能被调用
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game();//猜数字游戏
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
break;
}

} while (input);
return 0;
}

2.2 菜单制作menu

void menu()
{
printf("***************************\n");
printf("**** 1.paly 0.exit ****\n");
printf("***************************\n");
}

2.3 游戏函数game

再次声明每次生成不同的随机数,用rand()函数,通过srand((unsigned int)time(NULL))来调用,记住引用头文件<stdlib.h><time.h>,然后利用while死循环

通过if语句控制用户输入值与生成的随机数大小的比较,并给出提示,当猜对时,使用break跳出循环

void game()
{
int ret = 0;
int guess = 0;
//生成一个随机数
//那时间戳来设置随机数的生成起始点

ret = rand()%100+1; //生成随机数1-100//用rand()函数,rand()函数需要用srand()函数调用,而srand()函数需要用到time()函数即时间戳
while (1) //(unsigned int)time(NULL)用#include<time.h>来声明
{
printf("请猜数字:>"); //(unsigned int)强制类型转换,(NULL)定义一个空指针
scanf("%d", &guess); //猜的数字
if (guess > ret)
{
printf("猜大啦\n");
}
else if (guess<ret)
{
printf("猜小啦\n");
}
else
{
printf("恭喜你,猜对啦!\n");
break;
}
}

}

猜数字游戏

2.4 整体代码

void game()
{
int ret = 0;
int guess = 0;
//生成一个随机数
//那时间戳来设置随机数的生成起始点

ret = rand()%100+1; //生成随机数1-100//用rand()函数,rand()函数需要用srand()函数调用,而srand()函数需要用到time()函数即时间戳
while (1) //(unsigned int)time(NULL)用#include<time.h>来声明
{
printf("请猜数字:>"); //(unsigned int)强制类型转换,(NULL)定义一个空指针
scanf("%d", &guess); //猜的数字
if (guess > ret)
{
printf("猜大啦\n");
}
else if (guess<ret)
{
printf("猜小啦\n");
}
else
{
printf("恭喜你,猜对啦!\n");
break;
}
}

}
void menu()
{
printf("***************************\n");
printf("**** 1.paly 0.exit ****\n");
printf("***************************\n");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//为了是rand()能被调用
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game();//猜数字游戏
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
break;
}

} while (input);
return 0;
}

留言:

欢迎评论区交流哦