增量操作作为while循环中的参数

时间:2014-03-13 07:40:12

标签: c

#include <stdio.h>
#include <string.h>

main()
{
  int a;
  a=1;
  while(a++<=2)
    ;

  printf("%d",a);
}

此代码将输出显示为4。 a如何增加?

6 个答案:

答案 0 :(得分:4)

a++如何运作?

首先,让我们了解当您输入a++时会发生什么。您正在使用的内容称为帖子 increment operator。要解释其行为,可以查看“详细等效”

prev_a = a;
a = a + 1;
return prev_a;

请注意,a++表达式返回的值是增量前的值。

另一方面,如果您编写了++a,那么您将使用 pre 增量运算符,该运算符在增量后返回值。有点像:

a = a + 1;
return a;

因此,当您编写a++ <= 2时,您将比较a的当前值,并在比较“之后将其增加,以进行下一次迭代。


while如何运作?

现在当您编写类似while (expr) { /* ... */ }的内容时,会发生expr在每次迭代之前进行评估,并且只有在表达式的结果为true


那会发生什么?

  1. 第一次迭代
    • a等于1;
    • 它小于或等于2:我们决定进行另一次迭代;
    • 增量a;
  2. 第二次迭代
    • a等于2;
    • 它小于或等于2:我们决定进行另一次迭代;
    • 增量a;
  3. 第二次迭代
    • a等于3;
    • 小于或等于2:我们决定在此次迭代后停止;
    • 仍然会增加a ,作为“评估整个表达式a++ <= 2”的一部分;
  4. 最后,a等于4

    我猜你被欺骗的事实是a的前一个值(在增量之前)用于比较,但增量总是作为表达式的一部分发生。 a正在递增,即使比较返回false

    最后,您的代码相当于:

    int a;
    a = 1;
    
    int prev_a;
    while(true) {
        prev_a = a; // the previous value is saved for the comparison
        a = a + 1;  // the increment ALWAYS happen
        if (prev_a > 2) {
            break;
        }
    }
    

答案 1 :(得分:0)

  

如何增加?

a增加了a++中的while(a++<=2);

a++将返回a的值并向其添加一个值,因此当a为3时,a++<=2将为false,但a仍为{{1}}加上一个。

答案 2 :(得分:0)

a=3 a++<=23++<=2printf - 因此即使条件失败,它也会在语句结束时变为4。你可以简单地用while(a++<=2) { printf("%d ",a); } 检查一下:

{{1}}

答案 3 :(得分:0)

经过2次迭代后,a的值为2.因此条件为真且值再次递增i,e a = 3.

现在再次检查while条件并返回false。但是a再次递增为(3++<=2),因此a = 4

答案 4 :(得分:0)

init_stat  execute    status  result

a =1    while(a++<=2) success  a =2
a =2    while(a++<=2) success  a =3
a =3    while(a++<=2) fail     a =4

答案 5 :(得分:0)

因为循环(a++<=2)的条件评估了3次。

第一次:a是1,a&lt; = 2,然后a - &gt; 2 operator++
第二次:a是2,a&lt; = 2,然后a - &gt; 3 operator++
第3次:a是3,&lt; = 2,然后a-&gt; 4 operator++