26.循环语句-goto
26.1 知识点
goto语句注意事项
goto
语句主要用于改变程序的控制流程。尽管它曾经被广泛使用,但现在已经不推荐使用,并且在现代编程中几乎不再使用。主要原因包括:
goto
语句会使程序的逻辑变得混乱。goto
的执行效率较低,容易引入错误。goto
语句通常会使代码难以维护和调试。
goto语句是什么
goto
语句,也被称为无条件跳转语句,通常用于改变程序中语句的执行顺序。通过 goto
,程序可以跳到指定的标签位置。
goto语句基本语法
在使用 goto
语句时,需要使用标签来指示跳转的目标。标签是一个单词或字母组合,不能使用程序的关键字。标签所在的位置可以通过 goto
语句指定,使程序跳转到该位置。
例如,下面的代码展示了如何使用 goto
语句来控制程序流程:
int i = 0;
mrtao:
cout << "mrtao" << endl;
mrtao2:
cout << "mrtao2" << endl;
i++;
if (i < 5) {
goto mrtao;
}
cout << "mrtao2后的一句代码" << endl;
mrtao3:
cout << "mrtao3死循环" << endl;
goto mrtao3; // 返回mrtao3,构建死循环
在这个例子中,程序会执行 mrtao
和 mrtao2
标签的代码 5 次,之后跳到 mrtao3
标签并进入死循环。
goto语句不能跳过变量定义
goto
语句不能跳过变量的定义,否则会导致编译错误。例如,下面的代码尝试跳过变量的声明,会导致编译错误:
goto mrtao4;
int i1 = 10;
mrtao4:
i1 += 1;
这种写法会因为跳过了变量 i1
的定义而导致编译报错。
然而,如果在 goto
语句后面使用语句块进行声明,则不会出现编译错误,因为跳转到标签后会进入新的语句块,变量的作用域不会被跳过:
goto mrtao4;
{
int i1 = 10;
i1 += 1;
cout << i1 << endl; // 不会打印,因为跳过了到mrtao4标签
}
mrtao4:
cout << "mrtao4" << endl;
在这个例子中,尽管变量 i1
被声明在语句块中,但由于 goto
语句跳过了整个语句块,因此变量 i1
的值不会被打印。
26.2 知识点代码
Lesson26_循环语句_goto.cpp
#include <iostream>
using namespace std;
int main()
{
std::cout << "goto语句\n";
#pragma region goto语句注意事项
//goto语句只做了解
//不建议使用,以后开发时几乎不会用
//它几乎已经被淘汰掉了
//主要原因:
//1.会使程序逻辑混乱
//2.执行效率较低
//等等
#pragma endregion
#pragma region 知识点一 goto语句是什么
//goto语句又被称为无条件跳转语句
//用于改变语句的执行顺序
#pragma endregion
#pragma region 知识点二 goto语句基本语法
//goto语句中的标签
//标签一定是一个单词或者拼音组合 不要使用程序关键字
//指哪打哪
// 比如 下方代码会循环执行 mrtao mrtao2 5次后才跳出循环 进入mrtao3死循环 ···
int i = 0;
mrtao:
cout << "mrtao" << endl;
mrtao2:
cout << "mrtao2" << endl;
i++;
if (i < 5)
{
goto mrtao;
}
cout << "mrtao2后的一句代码" << endl;
mrtao3:
cout << "mrtao3死循环" << endl;
goto mrtao3;//返回mrtao3构建死循环
#pragma endregion
#pragma region 知识点三 goto语句不能跳过变量定义
//下面这样写会有控制传输跳过的实例化的编译报错 因为跳过了i1不会被声明
//goto mrtao4;
//int i1 = 10;
//mrtao4:
//i1 += 1;
//这样写不行 也会有会有控制传输跳过的实例化的编译报错
//goto mrtao4;
//int i1 = 10;
//i1 += 1;
//mrtao4:
//这样写没有编译报错 因为是在内部语句块声明
goto mrtao4;
{
int i1 = 10;
i1 += 1;
cout << i1 << endl;//不会打印 跳过到mrtao4
}
mrtao4:
cout << "mrtao4" << endl;
#pragma endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com