一、先给大家讲一下goto语句呗
goto语句,goto接一个对象,就会跳到那个对象那里去,如图,执行goto again后,回到到红色框again:后面,继续执行pritnf,完了之后又执行goto,成为一个死循环
goto语句不要随便乱用,可以跳过多个循环,而break一次只可以跳过一个循环,如图,多个for循环嵌套,假设遇到disaster的突发情况,就要跳出去解决,此时我就可以用goto语句一步到位,而break需要两次以上才可以跳出去
二、练习
1、请设计一个猜数字的游戏,在1-100之间,先生成一个随机数,当输入想猜的数字,比随机数大时提醒,猜大了;比随机数小,提醒猜小了;正好猜中则结束这一轮游戏。(关于生成随机数可以参考我的下一篇博文——如何输出随机数)
2、设计一个1min内让电脑关机的程序,如果在屏幕上输入“大哥”,就取消关机。
三、答案
第一题(关于生成随机数下一节给大家讲,大家有不懂的直接评论区留言哈,私信也可以)
//生成一个随机数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <time.h> //用time函数时头文件
#include <stdlib.h> //rand、srand函数头文件
void menu() //设计一个菜单
{
printf("**************************\n");
printf("******* 1.play ********\n");
printf("******* 2.exit ********\n");
printf("**************************\n");
}
void game() //猜游戏函数
{
int guess = 0; //初始化要猜测的数字
int ret = rand()%100+1; //最大32767,这个是一个规定,取一百的模后值为0-99,加一正好1-100
while (1) //让循环永久成立,知道输入到要猜的数字
{
printf("请输入你要猜测的数字:> ");
scanf("%d", &guess); //键盘输入要猜的数字
if (ret < guess) //输入的数字大了,继续猜
{
printf("猜大了\n");
}
else if (ret > guess) //输入的数字小了,继续猜
{
printf("猜小了\n");
}
else if (ret == guess) //猜中,跳出循环
{
printf("恭喜你猜对了\n");
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL)); //配合rand使用,srand后面要unsigned int,这里直接强制转换
int input = 0; //NULL表示空指针
do
{
menu();
printf("请选择:>");
scanf("%d", &input); //输入1/0才决定你玩不玩这个游戏
switch (input)
{
case 0:
printf("退出游戏");
break;
case 1:
game();
break;
default :
printf("输入信息有误\n");
break;
}
} while (input); //输入0时候,退出程序;输入一时可以开始游戏;输入其他数字时提示一下
return 0;
}
第二题
system用于执行系统命令,shutdown -s -t 60 就是60s后关机的指令,shutdown -a 可以取消这个指令,记得打英文的双引号)
goto again就是回到again的那个地方后面,这里的goto也可以换成while。
strcmp用于比较字符串的内容,一样它会返回一个0的整型值,要用string.h的头文件
#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include <stdio.h>
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60"); //执行一个系统指令格式如图,有空格要输入
again:
printf("你的电脑将在60s内关机,输入大哥按回车,解除关机\n");
scanf("%s", input);
if (strcmp(input, "大哥") == 0)
{
system("shutdown -a"); //取消关机的指令
printf("老弟还得练");
}
else
{
goto again; //没有输入或是输入错误,回到again那里继续循环
}
return 0;
}