C和C++从零开始系列(六)

前边说到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 会导致程序维护的困难,多使用一个变量,在现在的机器上也没有太多影响。

猜你喜欢

转载自www.cnblogs.com/danielhu/p/12151731.html
今日推荐