26.goto

  1. 26.循环语句-goto
    1. 26.1 知识点
      1. goto语句注意事项
      2. goto语句是什么
      3. goto语句基本语法
      4. goto语句不能跳过变量定义
    2. 26.2 知识点代码
      1. Lesson26_循环语句_goto.cpp

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,构建死循环

在这个例子中,程序会执行 mrtaomrtao2 标签的代码 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

×

喜欢就点赞,疼爱就打赏