Логическое И в троичном операторе в 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
,