我觉得这是个死循环啊

来源:百度知道 编辑:UC知道 时间:2024/06/20 15:52:09
main()
int x=3
do
printf("%3d",x-=2)
while(!(--x))
C语言里面0表示假,则!0=1表示真
x-=2之后值为1
--x后值为0
所以!(--x)值为1
所以继续循环

答案说是1 -2

这怎么是死循环呢,
1:x=3, x-=2 -> x=1 然后 --x = 0, 非一下 非零
2:x=0, x-=2 -> x=-2,然后--x= -3, 非一下 零
退出

x-=2之后值为1
--x后值为0
所以!(--x)值为1
所以继续循环

x-=2之后值为-2
--x后值为-3
所以!(--x)值为0
所以循环中止

不是死循环.
while(!(--x))这里先执行判断,判断结束了再执行自减操作。判断的时候,x的值为1,条件成立,继续循环。在一次判断的时候,x为-2,条件不成立,退出循环,所以输出结果应该是1和-2

继续循环以后,第二次不是又减2了么,就变假了。

这个问题我忘了