1999杨小小 发表于 2021-2-13 18:17:53

S1E21:指针的动动手请教

本帖最后由 1999杨小小 于 2021-2-13 18:17 编辑

两层循 环的意思我大概能理解,但里面的if(j-i>4)和goto存在的作用不清楚,麻烦各位前辈指点下{:10_257:}
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;
}

一叶枫残 发表于 2021-2-13 18:48:00

j - i > 4应该是判断立方值大于8时候的输出值(16,25,...)
goto作用:因为有两层循环,直接使用break退出只能退出1层循环,所以得到输出后直接采用了goto语句直接跳到FINDIT:return 0 来退出程序;
但建议不用goto,还用其他方法可以用的

李京 发表于 2021-2-13 19:38:37

                               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;

j-i>4是判断这个数是几个数相加的,因为一个数字,j循环一次
如果数字多就用第一种输出方法输出,否则就用第二种

goto 语句的话是用来跳出循环的
两层循环的话break,不太好跳出循环

永恒的蓝色梦想 发表于 2021-2-13 20:23:24

一叶枫残 发表于 2021-2-13 18:48
j - i > 4应该是判断立方值大于8时候的输出值(16,25,...)
goto作用:因为有两层循环,直接使用break退 ...

这种情况下,用 goto 是最简洁而高效的。

一叶枫残 发表于 2021-2-13 21:21:47

永恒的蓝色梦想 发表于 2021-2-13 20:23
这种情况下,用 goto 是最简洁而高效的。

那直接把return 0写在里面不是更简洁?????

永恒的蓝色梦想 发表于 2021-2-13 21:36:31

一叶枫残 发表于 2021-2-13 21:21
那直接把return 0写在里面不是更简洁?????

好吧,有道理。
我的意思是说,在退出多重循环的时候,goto 是最简洁而高效的(直接返回除外)。

1999杨小小 发表于 2021-2-16 15:24:51

谢谢前辈们,我懂了{:10_297:}
页: [1]
查看完整版本: S1E21:指针的动动手请教