为什么 if (2 < 9 < 3) 为真?

Sar*_*ale 15 c

这是我准备考试中的一个问题:

int val = 0;
int x = 0;
int y = 1;
if (x < val < y)
    printf(" true ");
else
    printf(" false ");
Run Code Online (Sandbox Code Playgroud)

为什么这是真的?我尝试更改x并且val它忽略了这些更改,只要y大于0(so 1, 2, 3...) 语句是正确的。例如:if (3 < 9 < 2)将是真的。

Yun*_*sch 38

( 2 < 9 < 3 )被评估为( ( 2 < 9 ) < 3)
在第一步中2 < 9被评估为真,这表示为整数值 1 并导致((1) < 3)第二步。
这显然是真的。

你可能想要类似的东西((x < val) && ( val < y))

  • @AnnZen 我感到很荣幸。 (2认同)

小智 5

首先是检查 x 是否 < value。如果为 true,则返回 1,因此接下来检查是否 1 < y。