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;
}
检查
Myboolean isAllEqual(int count,…)
函数可以检查任意数量的整数,count=要比较的值的数量。e、 g.在isAllEqual(4,2,4,2,5)
first4
中,表示要比较接下来的四个值
.这个答案略去了一些重要的部分。@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