C语言的goto语句——当有多层语句,但结果已经出错时,直接跳出层层语句,重新选择答案判断

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后面的语句都会正常执行。

猜你喜欢

转载自blog.csdn.net/m0_75186846/article/details/132093960