C 编程 while 循环

C Programming while loops

void main()
{
    int a;
    a=10;
    do
    while(a++<10);
    while(a++<=11);
    printf("%d",a);
}

以上程序给出了14的输出。 你能解释一下为什么吗?

好吧,post 增量只会在评估条件后发生,因此即使条件为假,a 也会增加,并且可能会增加您期望的循环运行次数。

这段代码会让你明白为什么,每当你输入 a++ 它总是递增的

void main()
{
    int a;
    a=10;
    do{
    while(a++<10);
    printf("%d",a);
}
    while(a++<=11);
    printf("%d",a);
}

此处您的代码计算为

int main()
{
    int a;
    a=10;
    do{
           //---> second iteration a= 12, for post iteration in while

        while(a++<10);  // First iteration: a=10 ,so false| second Iteration: a=12, so false

        //First iteration: Here a=11, as previous line's post increment| Second iteration: here a=13, as previous post increment

    } while(a++<=11);  //First iteration: a==11, that evaluete true, go to --->, line after do | Second iteration: a=13, false, loop end goto next line

    //Here a=14 for post increment in previous line's while loop

    printf("%d",a);   // a=14
}

In post increment 首先用当前值计算表达式,然后增加变量的值。

例如,在第二次迭代中,当程序在 while(a++<=11) 的外部开始执行时,这次 a=13 作为 a 的先前值。这个 a++<=11 执行和 return 0 使得 while(0) (因为 a=13,大于 11)。然后发生递增,a 变为 14。因为 while(0) 它打破了 do-while 循环并转到下一条指令并打印值 14。

花括号会使它更具可读性,但正如你所拥有的,a 的执行流程和值在行中进行了解释:

哦,这是邪恶的。稍微重新格式化代码应该会显示发生了什么:

a=10;
do
{
  while(a++<10);
}
while(a++<=11);

所以。 a 最初设置为 10。我们进入 do while 循环。 do while 循环中唯一的语句是 while( a++ < 10 );。请记住,表达式 a++ 计算 a 的当前值,并且作为 副作用 递增 a.

因此,a++ < 10 被评估。结果是 false10 不小于 10),但作为对表达式求值的结果,a 递增并且现在具有值 11 .在 do while 循环结束时,我们计算 a++<=11。计算结果为 true,因为 a 当前的值为 11。作为计算表达式的结果,a 递增到 12.

我们再次执行 do while 循环体。再次计算表达式 a++ < 10。和以前一样,结果是 false,但是作为计算表达式的结果 a 递增到 13.

然后我们再次评估a++ <= 11。结果是 false,因为 13 不小于或等于 11,并且 a 再递增 一次

因此,当这整个混乱结束时,a14

总结:

  1. a 最初是 10;
  2. do while循环进入
  3. a++ < 10 被评估,a 现在是 11
  4. a++ <= 11 被评估,a 现在是 12do while 循环重复
  5. a++ < 10 被评估,a 现在是 13
  6. a++ <= 11 被评估,a 现在是 14do while 循环退出。