大家好,很高兴又和大家见面了!前面我们花了四章的内容进行了编码题的练习以及编写了第一个游戏程序——猜数字,今天我们要探讨的是分支与循环的最后一个内容——goto语句。
goto语句
1.理解:
goto语句我们在分支与循环(1)中有提到过,它是作为转向语句的一种。goto语句也被称为无条件转移语句,我对它的理解是去往前往的意思,具体是去哪里,那就需要根据实际情况来决定了。
2.使用方法:
goto语句的使用格式是:
//语句结构
标识符://标识符后跟一个冒号;
正常语句;
goto 标识符;//goto语句后跟上标识符,中间用空格隔开,标识符后跟分号代表语句结束;
它具体是如何使用的,这里我们来举个例子,以打印1-9为例:
int main()
{
int a = 0;
b:
for (a = 0; a < 10; a++)
{
printf("%d ", a);
if (5 == a)
{
goto b;
}
}
return 0;
}
这个代码我们已经接触过很多次了,今天就不在重复看正常运行的结果了,但是本次编码过程中我在for语句前加了一个标识符b,在循环内加了一个if条件语句,条件语句的执行语句为goto b;这种情况下程序又会如何执行呢?下面我们来运行一下:
这里我们可以看到,程序进入了死循环,为什么会这样呢,我们来看看这个代码的运行流程:
从执行流程中我们可以看到,通过goto语句,每次在运行到a=5时就会跳转到循环外,从a=0开始进入循环判断,判定结果肯定为真,然后进入循环,这样就导致了程序无法走出for循环,这就是为什么运行结果是一个死循环。从这个例子我们可以得到下列结论:
1.goto语句后面跟的标识符不需要额外定义可以根据自己的喜好来编写,只需要在标识符后面加一个冒号就可以了;
2.goto语句在进行跳转时并没有任何条件限制,所以是无条件跳转,在使用时只需要goto加上前面有加冒号的标识符;
3.适用场合:
从上述例子我们可以看到,如果我们在代码中随意乱用标识符的话就很容易产生bug,那我们应该如何使用呢?请看下面的例子:
int main()
{
int a, b, c, d;
for (a = 0; a < 10; a++)
{
for (b = 0; b < a; b++)
{
for (c = 0; c < b; c++)
{
d = a + b + c;
if (b + c > a)
{
goto sum;
}
}
}
}
sum:
printf("%d+%d+%d=%d\n", a,b,c,d);
return 0;
}
这里我们嵌套了多个循环,如果我们我们正常运行的话它会从最里面的循环一层一层的结束循环然后跳出循环,但是我们在最里层的循环加一个goto语句的话会有什么结果呢?
我们从这个结果可以看到,相比于一层一层的结束循环,使用goto语句能更快的跳出循环,大大提高了运行效率,这里我们可以做个总结:
1.goto语句作为无条件转移语句,如果随意使用,容易出现bug,在循环中容易进入死循环;
2.goto语句在深层嵌套中用来跳出嵌套的话,可以大大提高程序的运行效率。
下面咱们来进行实操加深对goto语句的理解:
4.实操理解:
接下来我们来编写一个关机的小程序,在编写代码前,我们先来了解几个知识点:
1.电脑关机命令shutdown -s -t 60:-s——设置关闭,-t——设置时间, 60——60s;
2.cmd——command——命令行,可以通过电脑开始菜单里输入cmd;
3.取消关机命令:shutdown -a:-a——中止系统关闭,仅限在时限内使用;
4.system——执行系统命令函数;
在了解了这些内容之后,我们开始编写代码吧:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char a[20] = { 0 };//定义字符数组接受输入的字符;
again://标识符again为goto语句的跳转标志;
system("shutdown -s -t 60");//通过system函数执行系统命令,需要调用头文件<stdlib.h>;
printf("您的电脑将在1分钟后关闭,请输入one piece取消关机>;");
scanf("%s", a);
if (strcmp(a, "one piece") == 0)//strcmp——string compare字符串比较函数,需要调用头文件<string.h>;
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
这里咱们的代码就编码完成了,有兴趣的朋友可以去试一下。
慎用!!!整蛊小妙招:
在咱们存放项目的文件夹里找到debug文件夹点进去,会看到一个后缀名为.exe的文件:
这个就是咱们编写的程序,我们可以通过Ctrl+Alt+.打开任务管理器,之后选择文件->建立新任务->输入cmd->勾选以系统管理权限创建此任务->点击确定进入cmd窗口
在窗口内输入下面的代码:
sc create servicename binpath="你想要添加的程序的存放路径"
回车之后程序就成功添加进你的电脑服务中了:
我们只需要将单击此电脑,右键选择管理,找到服务与应用程序,点击服务,再寻找刚刚添加进去的新文件,将它的启动类型改为自动,这样你添加的程序就能自动运行了,具体要怎么使用,那就因人而异了。
那咱们今天的内容到这里就全部结束了,希望这篇内容能帮助大家更好的理解goto语句,接下来随着学习的深入,我会继续给大家分享我在学习过程中的感受,感谢大家的翻阅,咱们下一篇见。