C语言:为什么下面的程序段是死循环?手机党,原谅我没有排版

x=3;do{y=x--;if(!y){printf("x");continue;} printf("#");}while(1<=x<=2);这个是书上的题,我算的输出结果是###,不过答案是死循环

注意while里面的表达式:1<=x<=2,并不是判断x在区间[1,2]内,而是:首先计算1<=x的值,结果是真或者假,就是1或者0。然后判断这个值与2的大小关系,显然不论是1还是0,都小于等于2,所以永远是真的。从而使死循环。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-02
改成while(1<=x&&x<=2)才对,表达式1<=x<=2先算1<=x,不管x为什么值,1<=x要么成立,要么不成立,即它的结果只有1和0两种,接下来算1<=2(或者0<=2),其值仍然为真,因此它是一个永真循环,会无限循环下去。。。
第2个回答  2011-04-02
smart0193正解
do{
...
}while((x>=1)&&(x<=2));
这样就对了,别和数学上的比较弄混了
第3个回答  2011-04-02
while(1<=x<=2)改为while(x>=1 &&x<=2)
第4个回答  2011-04-02
x=3;
do
{
y=x--;
if(!y)
{
printf("x");continue;
}
printf("#");
}while(1<=x<=2);// 如果是while(1<=x and x<=2)就是你的答案了,忘记C是用&& 表示还是and 表示了
第5个回答  2011-04-02
while(1<=x<=2)这个是死循环

这样的表达式为逻辑判断,一步步的做出返回
先(1<=x)返回0或1
然后再判断(1<=x)<=2,返回0或1

所以返回值永远是1,所以是死循环