7.3.4 正确对待goto语句

在C语言中,goto语句也称为无条件转移语句。goto语句可以放在程序的任何位置,以实现程序的无条件转移,跳出当前操作,来到程序中其他语句处继续执行。使用goto语句的格式如下所示。

    goto语句标号;

其中,“语句标号”是按标识符规定书写的符号,放在某一语句行的前面,标号后加冒号“:”。语句标号起标识语句的作用,与goto语句配合使用。

C语言不限制在程序中使用标号的次数,但是各标号不得重名。goto语句的语义是改变程序流向,转去执行语句标号所标识的语句。goto语句通常与条件语句配合使用,从而实现条件转移、构成循环、跳出循环体等功能。

通过下面的代码可以统计从键盘输入一行字符的个数。

    #include"stdio.h"
    int main(void){
        int n=0;
        printf("input a string\n");
        loop: if(getchar()! ='\n')
        {
              n++;
              goto loop;
        }
        printf("%d", n);
    } int n=0;
    printf("input a string\n");
    loop: if(getchar()! ='\n')
    {
        n++;
        goto loop;
    }
    printf("%d", n);

上述代码通过使用if语句和goto语句构成循环结构。当输入字符不为’\n’时即执行n++操作,然后转移至if语句去执行。直至输入字符为’\n’才停止循环。

再看下面的代码。

    #include <stdio.h>
    int main(void){
          int i = 0;
          for (; ; ) {
              i++;
              printf("%d\n", i);
              if (i == 10) goto AAA;
          }
          AAA:;                                    /* 这是个空语句 */
          getchar();
          return 0;
    }

运行上述代码后,如果i值为10,则goto语句指示程序来到空白语句。

注意:在日常程序设计应用中,建议读者尽量不要使用goto语句,以免造成程序流程的混乱,它会使程序理解和调试都产生困难。