100 <= x <= 150作为if()中的参数,表现得很有趣

use*_*946 3 c algorithm conditional if-statement objective-c

我有一个if声明,然后是几个else if声明.所有if/else if语句的参数结构都是这样的:

if (100 <= x <= 149) //do this
else if (150 <= x <= 199) //do that
else if ...etc...
Run Code Online (Sandbox Code Playgroud)

但是,由于某种原因,只有第一个if语句被执行.X可以是200,只识别第一个if语句.

当X不符合前面语句的参数时,我不确定为什么它不会转移到下一个if语句.这在Obj-C中不起作用吗?任何帮助表示赞赏.谢谢

Dar*_*ust 18

你需要改写语句,如:

if (x >= 100 && x <= 149) {
} else if (x >= 150 && x <= 199) {
} ...
Run Code Online (Sandbox Code Playgroud)

您的第一个if评估如下:

if ((100 <= x) <= 149)
Run Code Online (Sandbox Code Playgroud)

我们来看看它是如何评估的:

  • if x = 200,(100 <= 200)则为true,因此计算值1(表示true).然后1 <= 149也是如此.
  • x例如10,如果值小于100,(100 <= 10)则为false,因此计算结果为值0(表示为false).再次,0 <= 149是真的.

因此无论价值如何x,整个表达式总是如此.


Dav*_*ave 12

C不是数学,所以

if (100 <= x <= 149)
Run Code Online (Sandbox Code Playgroud)

是不一样的

if (100 <= x &&  x <= 149)
Run Code Online (Sandbox Code Playgroud)

这是你的意思.前者将永远是真实的,因为100 <= x <= 149成为

((100 <= x) <= 149)
Run Code Online (Sandbox Code Playgroud)

留下两种可能性: (1 <= 149)(0 <= 149).两者都是真的.