Я хочу знать, если:проверка если много междунар равно
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. 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.
Вы из фона Python?композитного сравнения нет в C –