1. 语法结构
- goto 语句有两部分,:goto 和标签名。
- 标签的签名遵循变量命名规则:goto part2
- 要让这条语句正常工作,函数还必须包含一条标为 part2 的语句,该语句以标签名后紧跟一个冒号开始,如:
part2:printf("hello world!\n");
2. 应用场景
- goto 语句主要用在跳出多层嵌套的循环上。
举个栗子
#include <stdio.h>
int main()
{
int i, j, n;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 3; k++)
{
goto wifi;//无条件跳转到 wifi,不管你嵌套多少层循环
printf("hello world!\n");
}
}
}
wifi:printf("一下就跳出多层循环来到这了\n");
return 0;
}
#include <stdio.h>
int main()
{
int i, j, n;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 3; k++)
{
goto 张三;//取什么名字都可以
printf("hello world!\n");
}
}
}
张三:printf("一下就跳出多层循环来到这了\n");
return 0;
}
3. 避免使用 goto 语句
- 因为 goto 语句所独有的无视流程跳转的特性,会打乱代码原有的逻辑;
- 导致可读性变得极差,极容易出现 Bug。
- 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
4. 利用循环替代 goto 编写关机程序
- goto 语句其实还是可以避免它出现的,意味着还是有方法替代 goto 语句的。
- [X]例如: 分别用 goto 和循环的方法编一段关机程序。
关机程序
- 电脑运行起来后,1 分钟内关机。
- 如果输入:我是猪,则取消关机。
shutdown:关闭系统
-s:设置关机
-t:设置倒计时
60:60秒
-a:取消关机
goto 实现关机程序
#include <stdio.h>
#include <windows.h>
#include <string.h>
int main()
{
char input[50];
system("shutdowm -s -t 60");
//shutdown:关闭系统;-s:设置关机;-t:设置倒计时;60:60秒
again:
printf("你的电脑将在60秒后关机,输入:我是猪,就取消关机\n");
scanf("%s", input);
if (!strcmp(input, "我是猪"))
{
system("shutdown -a");//-a:取消关机
}
else
{
goto again;
}
return 0;
}
循环实现关机程序
#include <stdio.h>
#include <windows.h>
#include <string.h>
int main()
{
char input[50];
system("shutdowm -s -t 60");
//shutdown:关闭系统;-s:设置关机;-t:设置倒计时;60:60秒
while (1)
{
printf("你的电脑将在60秒后关机,输入:我是猪,就取消关机\n");
scanf("%s", input);
if (!strcmp(input, "我是猪"))
{
system("shutdown -a");//-a:取消关机
break;
}
}
return 0;
}