前边说到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