为什么循环从2到7?
int i;
for(i=1;i<=6;printf("\n%d\n",i))
i++;
此输出为
2 3 4 5 6 7
但i
的限制为6。
答案 0 :(得分:8)
for
循环的语法是
for (
第1条;
表达式2;
表达式3 {{ 1}} 声明
执行如下,引自)
,第6.8.5.3章,(强调我的)
表达式
C11
是控制表达式,它是 在每次执行循环主体之前进行评估。表达式expression-2
是 每次执行循环体后,将其评估为无效表达式。 [....]
在这里,expression-3
是正文,i++
是 expression-3 。
因此,执行顺序将类似于
printf("\n%d\n",i)
答案 1 :(得分:3)
像for
这样的循环
for(i=1;i<=6;printf("\n%d\n",i))
i++;
等同于
{
i = 1; // Initialization clause from for loop
while (i <= 6) // Condition clause from for loop
{
i++; // Body of for loop
printf("\n%d\n", i); // "Increment" clause from for loop
}
}
如您所见,printf
是在变量i
递增后 完成的,这当然意味着它将打印递增的值(2
到7
)。
答案 2 :(得分:2)
循环的工作等同于现在显而易见的
int i;
for (i = 1; i <= 6; /*intentionally blank*/){
i++;
printf("\n%d\n", i);
}
从概念上讲,for
循环中的第三个表达式恰好在循环体的右括号之前运行。
答案 3 :(得分:1)
您以不寻常的方式编写了for循环。
for循环的操作如下。
首先完成初始化。 i=1
然后检查表达式i<=6
然后进行尸体i++
然后执行增量。您的情况是printf("\n%d\n",i)
重复步骤2至4,直到步骤2为FALSE。
对于您而言,您可以看到printf
将首先完成i==7
,然后将检查i==7
的表达式。之后,for循环将退出。同样,只有在i
因此,第一张将用于2
,最后一张将用于7
答案 4 :(得分:-6)
您编写的循环不正确-您已将循环的主体替换为增量代码。因此,在完成循环主体中的i++
之后,当应该以相反的方式执行时,它将printf
作为增量。
按如下所示正确编写for
循环。
int i;
for(i=1;i<=6;i++)
printf("\n%d\n",i)