Логическое И в троичном операторе в C

Я пытаюсь найти максимум и минимум 3 целых чисел (var1,var2,var3) в C. Чтобы сделать вещи немного интереснее, я пишу логику в 1 строку.

(var1>var2)?((var1>var3)?(max=var1):(max=var3)&&(min=var2)):((var2>var3)?(max=var2):(max=var3)&&(min=var1));

Чтобы сделать отладку проще, вот скучная версия в несколько строк

(var1>var2)?
    ((var1>var3)?
        (max=var1):
        (max=var3)&&(min=var2)
    ):
    ((var2>var3)?
     (max=var2):
     (max=var3)&&(min=var1)
    );

Логическое AND не выполняется, min возвращает значение мусора. Помогите.

1 ответ

Посмотрите на скучную версию:

(var1>var2)?
    ((var1>var3)?
        (max=var1): // nothing gets assigned to min
        (max=var3)&&(min=var2) // nothing gets assigned to min, if var3==0
    ):
    ((var2>var3)?
     (max=var2): // nothing gets assigned to min
     (max=var3)&&(min=var1) // nothing gets assigned to min, if var3==0
    );

Вы можете видеть, что во многих случаях ничто не присваивается min,

Другие вопросы по тегам