我对这个程序的输出感到困惑:
#include<stdio.h>
int main()
{
int i=2;
while(i + 1?--i:14)
printf("\n%d", i);
return 0;
}
上述程序的输出是打印1
而不打印1
然后0
当使用i--
代替--i
时,它会打印1
,然后0
为什么会这样?
1
而不打印0
? 1
然后0
?答案 0 :(得分:5)
这是因为i--
导致在执行递减操作之前给出该值。但是,在--i
中,我将在使用其值之前减少。
为了更好地理解它: 让我们用你的例子:
i=2;
案例1:
while(i+1?--i:14)
第一遍:
条件i+1?--i:14
将被评估为2+1 ? 1 : 14
这将返回1
。循环将被执行,i
将包含值1
。
第二遍:
条件i+1?--i:14
将被评估为1+1 ? 0 : 14
这将返回0
。因此循环不会被执行,因此您将获得输出1
。
案例2:
while(i+1?i--:14)
第一遍:
条件i+1?i--:14
将被评估为2+1 ? 2-- : 14
这将返回2
。循环将被执行,i
将包含值1
。
第二遍:
条件i+1?i--:14
将被评估为2+1 ? 1-- : 14
这将返回1
。循环将被执行,i
将包含值0
。
在这种情况下,while
循环将执行两次。
答案 1 :(得分:2)
让我们按顺序:
i == 2
,表示i + 1
为3
(且非零如此为真),循环使用--i
表示条件减少{{1}到i
这是真的,循环运行
1
,这意味着i == 1
是i + 1
(也是如此),循环使用2
作为条件,--i
减少到i
零,这是假的,循环退出。
另一方面,如果你使用后减法,就像这样:
i == 2
,表示i + 1
为3
(并且非零如此为真),循环使用i--
作为“返回”{的条件{1}}(因为它是“true”运行循环)而然后将2
减少为i
1
,表示i == 1
为i + 1
(且为真),循环使用2
“返回”i--
(和因为它是“真”运行循环)然后将1
减少到零
i
,这意味着i == 0
是i + 1
(和true),循环使用1
“返回”零(并结束循环)然后将i--
缩减为i
。