林江楠 发表于 2021-11-5 16:01:22

C语言goto语句

#include <stdio.h>

int main()
{
      int i, j, n, cubed, sum = 0;

      printf("请输入一个整数:");
      scanf("%d", &n);

      cubed = n * n * n;

      for (i = 1; i < cubed; i += 2)
      {
                for (j = i; j < cubed; j += 2)
                {
                        sum += j;
                        if (sum == cubed)
                        {
                              if (j - i > 4)
                              {
                                        printf("%d = %d + %d ... + %d\n", cubed, i, i+2, j);
                              }
                              else
                              {
                                        printf("%d = %d + %d + %d\n", cubed, i, i+2, i+4);
                              }
                              goto FINDIT;
                        }

                        if (sum > cubed)
                        {
                              sum = 0;
                              break;
                        }
                }
      }

FINDIT:

      return 0;
}


这里goto语句是为了强行跳出最外层循环吗?

能用break语句实现吗,小甲鱼说尽量少使用goto语句

会降低程序的可读性

村里小黑 发表于 2021-11-5 16:21:31

可以用break;但是break只能跳出一层for循环

林江楠 发表于 2021-11-5 16:24:22

村里小黑 发表于 2021-11-5 16:21
可以用break;但是break只能跳出一层for循环

那就是不能使用break喽,他需要跳出i = 0的那层循环

村里小黑 发表于 2021-11-5 16:39:15

本帖最后由 村里小黑 于 2021-11-5 17:18 编辑

林江楠 发表于 2021-11-5 16:24
那就是不能使用break喽,他需要跳出i = 0的那层循环

你的代码等价于这样#include <stdio.h>

int main()
{
      int i, j, n, cubed, sum = 0;

      printf("请输入一个整数:");
      scanf("%d", &n);

      cubed = n * n * n;

      for (i = 1; i < cubed; i += 2)
      {
                for (j = i; j < cubed; j += 2)
                {
                        sum += j;
                        if (sum == cubed)
                        {
                              if (j - i > 4)
                              {
                                        printf("%d = %d + %d ... + %d\n", cubed, i, i+2, j);
                              }
                              else
                              {
                                        printf("%d = %d + %d + %d\n", cubed, i, i+2, i+4);
                              }
                              return 0;
                        }

                        if (sum > cubed)
                        {
                              sum = 0;
                              break;
                        }
                }
      }
      return 0;
}

用break可以这样:
#include <stdio.h>

int main()
{
      int i, j, n, cubed, sum = 0;
      bool m =0;//做判断返回的标志
      printf("请输入一个整数:");
      scanf("%d", &n);

      cubed = n * n * n;

      for (i = 1; i < cubed; i += 2)
      {
                for (j = i; j < cubed; j += 2)
                {
                        sum += j;
                        if (sum == cubed)
                        {
                              if (j - i > 4)
                              {
                                        printf("%d = %d + %d ... + %d\n", cubed, i, i+2, j);
                              }
                              else
                              {
                                        printf("%d = %d + %d + %d\n", cubed, i, i+2, i+4);
                              }
                              m = 1;//满足返回条件,标志位致1
                              break;//先跳出第一个for循环
                        }

                        if (sum > cubed)
                        {
                              sum = 0;
                              break;
                        }
                }
            if (m)//判断满足返回条件
            break;
      }
      return 0;
}

林江楠 发表于 2021-11-6 19:31:15

我感觉也可以使用exit函数
页: [1]
查看完整版本: C语言goto语句