前边说到C和C++使用 for 和 while 实现循环的方式,在C和C++中,还有一种方式能够实现循环,那就是 goto。虽然我们不建议使用 goto 。
这是上一篇中的while循环程序。
1 int main() 2 { 3 int a[10] ={0}; 4 int x = 0; 5 while( true ) 6 { 7 if (x >= 10) 8 break; 9 a[x]=2*x; 10 x++; 11 } 12 x=0; 13 while ( true ) 14 { 15 if (x >= 10) 16 break; 17 printf("The %d element is %d\n", x+1, a[x]); 18 x++; 19 } 20 return 0; 21 }
我们换为 goto 的方式来实现:
1 int main() 2 { 3 int a[10] ={0}; 4 int x = 0; 5 setvalue: 6 if (x<10) 7 { 8 a[x]=2*x; 9 x++; 10 goto setvalue; 11 } 12 13 x=0; 14 printvalue: 15 if (x<10) 16 { 17 printf("The %d element is %d\n", x+1, a[x]); 18 x++; 19 goto printvalue; 20 } 21 22 return 0; 23 }
使用 goto 不被推荐,在一些新的语言中,goto 被定义为关键字并且不被允许使用。
但是 goto 有 break 和 continue 无法实现的功能。比如有多个嵌套循环,在最里层的循环中,当满足某条件时,需要完全跳出最外层循环时,使用 goto 语句,能够简化程序,减少变量的使用。
1 int main() 2 { 3 int x = 0; 4 for (int i = 0; i < 10; i++) 5 { 6 for (int j = 0; j < 10; j++) 7 { 8 printf("Input x="); 9 scanf("%d", &x); 10 if (x % 2 == 0) 11 { 12 printf("Input an odd number.\n"); 13 break; 14 } 15 else 16 { 17 printf("Input an even number.\n"); 18 goto endflag; 19 } 20 } 21 printf("Current i=%d.\n", i+1); 22 } 23 endflag: 24 printf("Finishe.\n"); 25 }
第9行等待用户输入数字。
第10~14行,判断输入数字如果为偶数,跳出本次循环,程序执行第21行。
第15~19行,判断输入数字如果为奇数,直接跳出两层循环,程序执行第24行。
如果不使用goto语句,我们需要用到另外一个变量了。
int main() { int x = 0; for (int i = 0; i < 10; i++) { bool ret = false; for (int j = 0; j < 10; j++) { printf("Input x="); scanf("%d", &x); if (x % 2 == 0) { printf("Input an odd number.\n"); break; } else { printf("Input an even number.\n"); ret = true; break; } } if (ret) break; printf("Current i=%d.\n", i+1); } printf("Finishe.\n"); }
但是,goto 会导致程序维护的困难,多使用一个变量,在现在的机器上也没有太多影响。
来源:https://www.cnblogs.com/danielhu/p/12151731.html