对于C程序中的循环混乱

时间:2019-01-30 11:31:37

标签: c for-loop

为什么循环从2到7?

int i;    
for(i=1;i<=6;printf("\n%d\n",i))    
i++;

此输出为

2
3
4
5
6
7

i的限制为6。

5 个答案:

答案 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递增后 完成的,这当然意味着它将打印递增的值(27)。

答案 2 :(得分:2)

循环的工作等同于现在显而易见的

int i;    
for (i = 1; i <= 6; /*intentionally blank*/){
    i++;
    printf("\n%d\n", i);
}

从概念上讲,for循环中的第三个表达式恰好在循环体的右括号之前运行。

答案 3 :(得分:1)

您以不寻常的方式编写了for循环。

for循环的操作如下。

  1. 首先完成初始化。 i=1

  2. 然后检查表达式i<=6

  3. 然后进行尸体i++

  4. 然后执行增量。您的情况是printf("\n%d\n",i)

  5. 重复步骤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)