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语句,以免造成程序流程的混乱,它会使程序理解和调试都产生困难。