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;
} j - i > 4应该是判断立方值大于8时候的输出值(16,25,...)
goto作用:因为有两层循环,直接使用break退出只能退出1层循环,所以得到输出后直接采用了goto语句直接跳到FINDIT:return 0 来退出程序;
但建议不用goto,还用其他方法可以用的 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 18:48
j - i > 4应该是判断立方值大于8时候的输出值(16,25,...)
goto作用:因为有两层循环,直接使用break退 ...
这种情况下,用 goto 是最简洁而高效的。 永恒的蓝色梦想 发表于 2021-2-13 20:23
这种情况下,用 goto 是最简洁而高效的。
那直接把return 0写在里面不是更简洁????? 一叶枫残 发表于 2021-2-13 21:21
那直接把return 0写在里面不是更简洁?????
好吧,有道理。
我的意思是说,在退出多重循环的时候,goto 是最简洁而高效的(直接返回除外)。 谢谢前辈们,我懂了{:10_297:}
页:
[1]