这个程序的输出是什么?
#include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
int x=20,y=30,z=10;
int i=x<y<z;
printf("%d",i);
getch();
}
Run Code Online (Sandbox Code Playgroud)
实际上i=20<30<10,条件是假的,值i应为0但i等于1.为什么?
这int i=x<y<z;不符合您的预期.
效果是int i=(x<y)<z;,x<y首先评估,然后将值true与之进行比较z.
Pascal指出低于C中的比较结果1而不是true.但是,C++ 在下一次比较中true被隐式转换为1,因此结果是相同的.
比较运算符不能那样工作.您的计划相当于:
i = (x < y) < z;
Run Code Online (Sandbox Code Playgroud)
这相当于:
i = (x < y);
i = i < z;
Run Code Online (Sandbox Code Playgroud)
第一次手术后,i == 1.所以第二个操作相当于:
i = 1 < 10;
Run Code Online (Sandbox Code Playgroud)
您需要将语句重写为:
i = (x < y) && (y < z);
Run Code Online (Sandbox Code Playgroud)