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 得到结果为 真本回答被提问者采纳
好像应该是 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比较大小。
*************************************************
1<b<5表示的本来就不是b大于1小于5的意思
它相当于以下形式:
(1<b)<5
先判断1是否小于b,得到一个0或者1,然后再用这个0或者1与5比较大小。