我想知道是否:
val1 = val2 = val3 ... = val6
我试试这个:
if (val1 == val2 == val3 == val4 == val5 == val6)
{
}
但它不起作用,为什么?
答案 0 :(得分:18)
==
运算符仅适用于值对。当你这样做时:
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 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)
在这种情况下,我建议编写宏或函数(如果它是大尺寸的数组或者在运行时分配的话)。