2013-10-11 3 views

ответ

18

Оператор == работает только между парами значений. Когда вы сделаете это:

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)) { 
    ... 
} 
8

Вы не можете связаться с оператором ==. Сделайте это:

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

Я хотел бы предложить писать макрос или функцию (если это массив с большим размер или если он выделен во время выполнения) в этом случае.

+1

Этот ответ вроде уходит из важных бит. – rmaddy

+0

@rmaddy хорошо, все остальные уже говорили о том, что (a == b && b == c ...) – wirm

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.

My 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.

Смежные вопросы