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

零、前言

C语言中提供了可以随意滥用的goto语句和标记跳转的标号。

从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程,例如一次跳出两层或多层循环。

这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

goto语句:跳到哪里去。(容易打乱执行流程)

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

goto会使程序再到again那一行代码,然后往下运行。

这个代码会使程序不断地打印hello,成为死循环。

一、实例

看如下代码:

一个关机程序(请勿轻易尝试)

#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过于繁琐。

 

 

 

 

 

 

 

你可能感兴趣的:(C语言)