检查很多int是否相等

时间:2013-10-11 16:43:12

标签: ios objective-c c

我想知道是否:

val1 =  val2 = val3 ... = val6 

我试试这个:

if (val1 == val2 == val3 == val4 == val5 == val6) 
{


}

但它不起作用,为什么?

4 个答案:

答案 0 :(得分:18)

==运算符仅适用于值对。当你这样做时:

val1 == val2 == val3

真正发生的是:

(val1 == val2) == val3

因此,如果val1val2相等,则括号中的表达式求值为true:

true == val3

然后检查true == val3,而不是val1还是val2 == val3。你必须这样做:

val1 == val2 && val1 == val3

尽管如此,这对于六个变量来说变得相当笨拙。你真的有六个局部变量需要比较吗?也许您应该将它们存储在某种数组中。然后你可以这样做:

bool all_equal(int *vals, int length) {
    if (length == 0) {
        return true;
    }
    int first = vals[0];
    for (int i=1; i < length; i++) {
        if (vals[i] != first) {
            return false;
        }
    }
    return true;
}

所以而不是:

int val1 = ..., val2 = ..., val3 = ..., val4 = ..., val5 = ..., val6 = ...;
if (val1 == val2 && val2 == val3 && val3 == val4 && val4 == val5 && val5 == val6) {
    ...
}

你会:

int vals[6] = {..., ..., ..., ..., ..., ...};
if (all_equal(vals, 6)) {
    ...
}

答案 1 :(得分:8)

您无法链接==运算符。这样做:

if (val1 == val2 && val2 == val3 && val3 == val4 && val4 == val5 && val5 == val6) {
    // they are all equal
}

答案 2 :(得分:1)

其他用户已经很好地解释了错误问题,我只是想分享另一种方法。

我使用可变数量的参数编写了一个C代码:9.9. Variable numbers of arguments我希望你觉得它很有趣

#include<stdio.h>
#include<stdarg.h>     
typedef enum {FALSE, TRUE} boolean;
boolean isAllEqual(int count, ...){   
    va_list ap;  // vlist variable
    int num = 0;
    boolean flag = TRUE;
   //Step2: To initialize `ap` using right-most argument that is `c` 
    va_start(ap, count); 

   //Step3: Now access vlist `ap`  elements using va_arg()
     num = va_arg(ap, int);
     while(--count){
       if (num != va_arg(ap, int)){
            flag = FALSE;
            break;
       }
     }
    //Step4: Now work done, we should reset pointer to NULL
    va_end(ap); 
    return flag? TRUE: FALSE;
}
int main(){
    if(isAllEqual(5, 2, 2, 2, 2, 2))
       printf(" Yes, All are equal\n");
    else
       printf(" No, All are NOT equal\n");

    if(isAllEqual(4, 2, 4, 2, 5))
       printf(" Yes, All are equal\n");
    else
       printf(" No, All are NOT equal\n");
    return 0;
}

输出:

 Yes, All are equal
 No, All are NOT equal

检查codepade

我的boolean isAllEqual(int count, ...)函数可以检查任意数量的整数,count =您想要比较的值的数量。例如在isAllEqual(4, 2, 4, 2, 5)首先4表示您想要比较下四个值。

A short theory in four points will help you to understand my code

答案 3 :(得分:0)

在这种情况下,我建议编写宏或函数(如果它是大尺寸的数组或者在运行时分配的话)。