如何在C中测试几个变量的等价性

Fer*_*s 7 c

假设我想在if语句中测试不仅仅是一个,而是几个等价变量:

if(x1==x2==y1==y2){
    printf("Input values shouldn't be equal!");
}
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.还有什么方法可以做到这一点?

Joh*_*ode 26

if (x1 == x2 && x2 == y1 && y1 == y2) { ... }
Run Code Online (Sandbox Code Playgroud)

表达式的结果a == b将是0或1的整数值.==运算符是左关联的,因此表达式a == b == c将被计算为(a == b) == c; 也就是说,a == b(0或1)的结果将与c的值进行比较.所以在下面的代码中

if (a == b == c) { ... }
Run Code Online (Sandbox Code Playgroud)

如果a == b且c == 1或a!= b且c == 0,则表达式仅计算为true.


San*_*nen 10

if (x1 == x2 && x1 == y1 && x1 == y2)
{
  printf("Input values shouldn't be equal!");
}
Run Code Online (Sandbox Code Playgroud)


Ara*_*raK 9

if( x1 == x2 && x2 == y1 && y1 == y2 ) { ... }
Run Code Online (Sandbox Code Playgroud)


rmn*_*rmn 6

如果它们是整数,则可以使用按位运算:

if ((x1 & x2 & x3 & x4) == (x1 | x2 | x3 | x4))
  // all are equal
Run Code Online (Sandbox Code Playgroud)

它会评估真正的IFF,它们都是一样的


M1E*_*1EK 0

顺便说一下,不起作用,因为 (x1 == x2) 如果为 true,则计算结果为数字 1;如果为 false,则计算结果为 0。(x1 == x2 == x3) 最终计算为 ((x1 == x2) == x3)。

我认为您需要编写自己的函数来执行此操作。