如何比较多个变量以查看它们是否相同? (例如= = b == c)我知道你可以做到 if(a == b)&& (a == c)&& (b == c){} 但是有许多变量(在我的情况下为9),这不是一个好方法。
编辑:我不需要每个变量相互比较(&&(b == c)部分)。我想比较所有值,看它们是否相同,所以比较(a == b)&& (a == c)&& (a == d)等是同样的事情。我只是不想重复代码(如(a == b)&&(a == c)&&(a == d)示例。)
答案 0 :(得分:3)
请注意,您不必将所有变量相互比较,只需将每个变量相互比较即可。换句话说,如果你知道的N个变量是相等的,那么如果下一个变量等于N中的一个,它就等于所有变量。
因此,要比较N个变量的相等性,需要进行N-1次比较,而不是1 + 2 + ... + N - 1 =(N-1)(N-2)/ 2.
例如:
if (a==b && b==c && c==d && d==e && e==f && f==g && g==h && h==i) {
...
由于&&
运算符是短路运算符,因此一旦子表达式的计算结果为false,条件的评估就会停止。
如果所有这些值都是数组的一部分,则可以使用循环执行:
int equal = 1;
for (i=0;(i<len-1) && equal;i++) {
equal = equal && (a[i] == a[i+1]);
}
如果&& equal
评估为false,for
条件中的其他equal
将提前退出循环。
答案 1 :(得分:1)
这样的字符串相等运算符可能会导致&#34;意外&#34;结果:
#include <stdio.h>
int main(int argc, char **argv)
{
int a = 1, b = 2, c = 0;
printf("%d\n", a == b == c);
return 0;
}
即使所有数字都不同,也会打印1
(&#34; true&#34;)。这是因为a == b
是0
(&#34; false&#34;),并将其与c = 0
进行比较会产生1
(&#34; true&# 34。)
您问题的解决方案如下:
int all_equal(int *a, int num)
{
int i;
for(i=1; i<num; i++)
if(a[0] != a[i])
return 0;
return 1;
}
答案 2 :(得分:1)
这里没有声称效率,但是如果你有那么多(虽然9不是那么多)或者更多,把它们放在一个数组中然后循环它就应该这样做。只需使用bool
s作为类型:
#include <stdbool.h>
#define NUM_INTS 9
int myInts[NUM_INTS];
// initialize myInts
int i;
bool allEqual = true;
for (i = 1; i < NUM_INTS; i++)
{
if (myInts[0] != myInts[i])
{
allEqual = false;
break;
}
}
// allEqual == true if all are equal, false otherwise
这不是每次比较,但它应该足够了解。正如评论中所指出的,如果a==b
和a==c
,我们就知道b==c
而无需检查。