#include <stdio.h>
#include <string.h>
main()
{
int a;
a=1;
while(a++<=2)
;
printf("%d",a);
}
此代码将输出显示为4。
a
如何增加?
答案 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
。
a
等于1
; 2
:我们决定进行另一次迭代; a
; a
等于2
; 2
:我们决定进行另一次迭代; a
; a
等于3
; 2
:我们决定在此次迭代后停止; a
,作为“评估整个表达式a++ <= 2
”的一部分; 最后,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++<=2
时3++<=2
即printf
- 因此即使条件失败,它也会在语句结束时变为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++