Men*_*han 0 c c++ if-statement comparison-operators
int j=42;
if( (5<j<=1) ) {
printf("yes");
} else {
printf("no");
}
Run Code Online (Sandbox Code Playgroud)
输出:
yes
Run Code Online (Sandbox Code Playgroud)
为什么输出是?
不是条件只有一半是真的吗?
C不理解类似数学的语法,所以
if(1<j<=5)
Run Code Online (Sandbox Code Playgroud)
没有被解释为你期望和想要的; 它应该是
if (1 < j && j <= 5)
Run Code Online (Sandbox Code Playgroud)
或类似的.
如在其他答案中所解释的,表达式被评估为
((1 < j) <= 5)
=> ("true" <= 5)
=> "true"
Run Code Online (Sandbox Code Playgroud)
其中"true"(布尔值)被隐式转换为1,例如这里的解释,也引用了标准,这解释了为什么"true"必须"小于"5(尽管在C中可能不完全正确)谈论"从bool到int的隐式转换"
小智 5
你的问题有点破,但我相信以下内容将澄清你的情况:
在C中,1 < j <= 5意思是相同的(1 < j) <= 5.并且值为1 < j0或1取决于是小于还是等于1或严格大于1.所以这里是代码中j的一些值会发生的情况:
如果j == 0,这个表达式是(1 < 0) <= 5,减少到0 <= 5(因为1 < 0是假的).这是一个真实的表达.你的程序输出"是".
如果j == 3,这个表达式是(1 < 3) <= 5,减少到1 <= 5(因为1 < 3是真的).这是一个真实的表达.你的程序输出"是".
如果j == 6,这个表达式是(1 < 6) <= 5,减少到1 <= 5(因为1 < 6是真的).这是一个真实的表达.你的程序输出"是".
在所有情况下,您的程序输出"是",因为1 < j它是0或1,并且两种方式都小于5.
你应该使用的是1 < j && j <= 5.
| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |