如何比较C中的多个变量?

时间:2016-04-19 17:19:00

标签: c comparison-operators

如何比较多个变量以查看它们是否相同? (例如= = b == c)我知道你可以做到     if(a == b)&& (a == c)&& (b == c){} 但是有许多变量(在我的情况下为9),这不是一个好方法。

编辑:我不需要每个变量相互比较(&&(b == c)部分)。我想比较所有值,看它们是否相同,所以比较(a == b)&& (a == c)&& (a == d)等是同样的事情。我只是不想重复代码(如(a == b)&&(a == c)&&(a == d)示例。)

3 个答案:

答案 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 == b0(&#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==ba==c,我们就知道b==c而无需检查。