for循环中的顺序是什么?

Dav*_*vid -2 c math loops for-loop

我正在尝试解决项目euler的问题5,我得到的答案是错误的:

#include <stdio.h>

main() 
{
    int num;
    int x = 0;
    for (num = 20; x == 0; num++)
    {
        if ((num%1) == 0 && (num%2) == 0 && (num%3) == 0 && (num%4) == 0 && (num%5) == 0 && (num%6) == 0 && (num%7) == 0 && (num%8) == 0 && (num%9) == 0 && (num%10) == 0 && (num%11) == 0 && (num%12) == 0 && (num%13) == 0 && (num%14) == 0 && (num%15) == 0 && (num%16) == 0 && (num%17) == 0 && (num%18) == 0 && (num%19) == 0 && (num%20) == 0)
        x = 1;
    }
    printf("%d %d", num, x);
}
Run Code Online (Sandbox Code Playgroud)

我的程序不断打印232792561(我知道我正在打印x,这只是为了排除故障).

我得到的逐字输出是:232792561 1.

我做了一些研究,我发现问题的正确答案是232792560.我现在开始相信问题在于for循环.

循环首先做什么,迭代(num++)或测试(x == 0)?

小智 14

for循环可以转换为等效的while循环:

for (num = 20; x == 0; num++) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

是相同的

num = 20;
while (x == 0) {
    // do stuff, then
    num++;
}
Run Code Online (Sandbox Code Playgroud)

首先检查条件,然后执行循环体,然后执行增量.

(是的,正如其他人建议的那样,如果您break;在需要时退出循环,则需要正确的结果,因为break;立即跳出循环,因此最后一次不执行递增语句.)


Dan*_*her 6

执行循环体之后(如果有的话,因为首先运行初始化代码,然后检查条件以查看是否输入了正文),

  • 首先运行更新代码
  • 然后检查条件.

因此,设置x为1后,num再次递增.

x您可以简单地设置为1来结束循环,break;而不是运行更新代码而退出循环.