我想知道是否:
val1 = val2 = val3 ... = val6
我试试这个:
if (val1 == val2 == val3 == val4 == val5 == val6)
{
}
但它不起作用,为什么?
我想知道是否:
val1 = val2 = val3 ... = val6
我试试这个:
if (val1 == val2 == val3 == val4 == val5 == val6)
{
}
但它不起作用,为什么?
该==
运算符仅适用于成对的值。当你这样做时:
val1 == val2 == val3
真正发生的是这样的:
(val1 == val2) == val3
因此,如果val1
和val2
相等,括号中的表达式的计算结果为真:
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)) {
...
}
您不能链接==
操作员。做这个:
if (val1 == val2 && val2 == val3 && val3 == val4 && val4 == val5 && val5 == val6) {
// they are all equal
}
其他用户已经很好地解释了错误问题,我只是想分享另一种方法。
我使用可变数量的参数编写了一个 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
表示您想要比较接下来的四个值。
在这种情况下,我建议编写一个宏或一个函数(如果它是大尺寸的数组或者它是在运行时分配的)。