C语言入门笔记 第五讲【番外篇(goto语句】)

零、前言 C语言中提供了可以随意滥用的goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程,例如一次跳出两层或多层循环。
这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
goto语句:跳到哪里去。(容易打乱执行流程)

again: printf("hello"); goto again;

goto会使程序再到again那一行代码,然后往下运行。
这个代码会使程序不断地打印hello,成为死循环。
一、实例 【C语言入门笔记 第五讲【番外篇(goto语句】)】看如下代码:
一个关机程序(请勿轻易尝试)
#include int main() { char input[10] = {0}; system("shutdown -s -t 60"); again: printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>"); scanf("%s", input); if(0 == strcmp(input, "我是猪")) { system("shutdown -a"); } else { goto again; } return 0; }

而如果不适用goto语句,则可以使用循环:
#include #include int main() { char input[10] = {0}; system("shutdown -s -t 60"); while(1) { printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>"); scanf("%s", input); if(0 == strcmp(input, "我是猪")) { system("shutdown -a"); break; } } return 0; }

goto语句真正适合的场景如下:
for(...) for(...) { for(...) { if(disaster) goto error; } } … error: if(disaster) //处理错误情况

如果灾难发生,直接跳到最外层。break过于繁琐。







    推荐阅读