Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检查大量int是否相等_Ios_Objective C_C - Fatal编程技术网

Ios 检查大量int是否相等

Ios 检查大量int是否相等,ios,objective-c,c,Ios,Objective C,C,我想知道: val1 = val2 = val3 ... = val6 我试试这个: if (val1 == val2 == val3 == val4 == val5 == val6) { } 但是它不起作用,为什么?你不能链接==操作符。这样做: if (val1 == val2 && val2 == val3 && val3 == val4 && val4 == val5 && val5 == val6) {

我想知道:

val1 =  val2 = val3 ... = val6 
我试试这个:

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


}

但是它不起作用,为什么?

你不能链接
==
操作符。这样做:

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

=
运算符仅在值对之间工作。执行此操作时:

val1 == val2 == val3
真正发生的是:

(val1 == val2) == val3
因此,如果
val1
val2
相等,则括号中的表达式计算为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 vals[6] = {..., ..., ..., ..., ..., ...};
if (all_equal(vals, 6)) {
    ...
}

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

错误问题已经被其他用户巧妙地解释过了,我只想分享另一种方法

我使用可变数量的参数编写了一个C代码:希望您觉得它很有趣

#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;
}
检查

My
boolean isAllEqual(int count,…)
函数可以检查任意数量的整数,count=要比较的值的数量。e、 g.在
isAllEqual(4,2,4,2,5)
first
4
中,表示要比较接下来的四个值


.

这个答案略去了一些重要的部分。@rmaddy好吧,其他人都已经说过如果(a==b&&b==c…)你是Python背景的吗?C语言中不存在复合比较
#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