5

我想知道是否:

val1 =  val2 = val3 ... = val6 

我试试这个:

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


}

但它不起作用,为什么?

4

4 回答 4

18

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

val1 == val2 == val3

真正发生的是这样的:

(val1 == val2) == val3

因此,如果val1val2相等,括号中的表达式的计算结果为真:

true == val3

然后它检查是否== trueval3而不是== 。你必须这样做:val1val2val3

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)) {
    ...
}
于 2013-10-11T16:45:12.273 回答
8

您不能链接==操作员。做这个:

if (val1 == val2 && val2 == val3 && val3 == val4 && val4 == val5 && val5 == val6) {
    // they are all equal
}
于 2013-10-11T16:44:26.187 回答
1

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

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

#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

检查键盘

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

一个简短的四点理论将帮助您理解我的代码

于 2013-10-11T17:35:27.500 回答
0

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

于 2013-10-11T16:46:47.200 回答