C语言中a<b<c

main(){
int a,b,c;
scanf("%d &d &d",&a,&b,&c);
printf("%d",a<b<c);
}
当a=1,b=2,c=5,输出0;
当程序改成
main(){
int a,b,c;
scanf("%d &d &d",&a,&b,&c);
printf("%d",1<b<5);
}
b=2时,输出1

为什么啊?我用的是vc++6.0,难道是编译器的问题?高人指点

还有一个不明白的地方,我学的是c++,目前在看C的书,c++中不允许出现1<b<5类似连比的语句,c中貌似可以?
但是我发现if('0'<ch1<'9')和if(ch1>'0'&&ch1<'9')不等效啊~
难道是只有格式化输出时才能出现?
抑或是1<b<5表示的本来就不是b大于1小于5的意思?

请解答详细点,不胜感激!!
请高手详细解答第一个问题--为什么一次输出0,一次输出1?

第1个回答  2010-02-10
scanf("%d &d &d",&a,&b,&c);
好像应该是 scanf("%d %d %d",&a,&b,&c);
不然 b , c都应该没有值,
而默认的整形初始值C中是0,
所以,第一个结果为 1< 0< 0 得到结果为 假
而第二个结果 2 < 0 < 5 得到结果为 真本回答被提问者采纳
第2个回答  2010-02-10
1<b 是个布尔表达式,返回值为真或者假,但是C语言中没有布尔类型,是用0和非0来表示假和真的,如果1小于b,那么1<b就为真,这个布尔表达式结果就是1,否则,1<b就为假,布尔表达式的结果就是0

*************************************************

1<b<5表示的本来就不是b大于1小于5的意思

它相当于以下形式:

(1<b)<5

先判断1是否小于b,得到一个0或者1,然后再用这个0或者1与5比较大小。

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网