goto语句其实不常用到,但是当我们不断嵌套时,会成为一个很有用的工具。
先说结论:goto 和 flag 的作用只是跳过它们中间的代码,但是不管有没有goto,flag后面的语句都会正常执行。
一、使用场景(例子)
这里举个例子:
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
我的想法是给数组 arr[6] 初始化为全0,并给A,B,C,D,E每个选手赋值为1,2,3,4,5,6,
让系统生成随机数1和2,来利用switch语句选择前半句与后半句,这里需要六个 switch 语句
但是问题来了,如果选择了A选手的前半句和B选手的前半句,是不是一定是错了呢?我们就可以直接否定这次的答案,不必再往下进行了。
但是我们这可是需要 while 循环来确定数组的每个元素都有值, while 里嵌套了 switch 语句,在switch 语句的 case 中用 if 语句判断这个元素是否已经被占用了,这样再使用 break 或 continue 时,就仅仅只能跳出一个switch语句,而无法避免下面的 switch 语句此时,再使用 goto 语句就比较明了了。
二、goto语句的使用
我也进行了相关的搜索,但结果基本都是给了一个 flag 给我们展示 goto 语句的作用
2.1 goto语句语法
goto 名称;
如图:
int main()
{
goto flag;
printf("a\n");
printf("b\n");
flag:
printf("c\n");
printf("d\n");
return 0;
}
通过运行结果,我们可以得出goto语句会跳过flag之前的语句。
2.2关于flag
我们可以删去上面代码的goto语句,也可以自己创建一个可以不使用也可以使用goto语句的例子:
int main()
{
int i = 0;
scanf("%d", &i);
if (i == 1)
{
goto flag;
}
flag:
printf("第一行:%d\n", i);
printf("第二行:%d\n", i);
printf("第三行:%d\n", i);
printf("第四行:%d\n", i);
return 0;
}
当我们输入1时,程序会跳到 flag,但是 flag 后有一个冒号 : ,它的作用范围是几行呢?如果 flag 只作用一行,那么我加一个大括号会不会让它全部执行呢?
其实,goto 和 flag 的作用只是跳过它们中间的代码,但是不管有没有goto,flag后面的语句都会正常执行。