C++ goto语句

goto:跳至标记处继续执行程序

首先来个范例,简单入个门

#include <iostream>
using namespace std;
int main() {
	int getInput;
	do
	{
		cin >> getInput;
		if (getInput % 2 == 1)
		{
			cout << "输入的是单数" << endl;
			goto BREAK;
			cout << "会从这里接着执行吗?" << endl;
		}
	} while ( getInput != 404);
	BREAK: {
		cout << "结束" << endl;
		return 0;
	}
	return 0;
}

注意!

  • 使用goto执行完BREAK代码块中代码后不会返回原来的地方(就是这里👇 )继续执行

    cout << "会从这里接着执行吗?" << endl;
    
  • goto语句的目标代码块也是普通代码,如果没有通过goto进入BREAK代码块,正常走也是会执行目标代码块中内容(不信你运行程序,输入404试试)

    404
    结束
    

了解了上述2点——基本的概念,没有什么多的了;然后介绍点进阶的

goto目标代码块中可以调用goto

#include <iostream>
using namespace std;
int main() {
	int i;
	do
	{
		cout << "请输入" << endl;
		cin >> i;
		if ( i % 2 == 0)
		{
			cout << "before OA" << endl;
			goto OA;// 前向后跳
			cout << "after OA" << endl;//这里不会被执行
		}
		else
		{
			cout << "before OM" << endl;
			goto OM;
			cout << "after OM" << endl;//这一步不会被执行
		}
	} while (true);
	CONTINUE: {
		cout << "after CONTINUE" << endl;
		return 0;
	}
	OA: {
		cout << "OA before CONTINUE" << endl;
		goto CONTINUE;//跳转至CONTINUE
		cout << "OA after CONTINUE" << endl;//这里不会被执行
		}
	OM: {
		cout << "OM before CONTINUE" << endl;
		goto CONTINUE;//跳转至CONTINUE
		cout << "OM after CONTINUE" << endl;//这里不会被执行
	}
	return 0;
}
请输入
90
before OA
OA before CONTINUE
after CONTINUE
请输入
9
before OM
OM before CONTINUE
after CONTINUE

上述代码中,顺序上CONTINUE OA之前,而执行顺序却从头到尾再到中间;是的!这就是goto语句的“魅力”,导致程序跳跃严重,严重影响后期维护。所以不建议大家在编码中使用goto语句。值得注意的是:有的开发团队是严禁在代码中使用goto语句的!

posted @ 2022-12-06 11:33  勤匠  阅读(279)  评论(0编辑  收藏  举报