尝试用三元运算符比较三个数字不起作用

trying three numbers comparision with ternary operator does not work

#include <stdio.h>

void main()
{
    int n1, n2, n3, l;

    printf("Enter any three numbers:\n");
    scanf("%d %d %d", &n1, &n2, &n3);

    (n1 >= n2) ? l = n1 : ((n1 >= n3) ? l = n1 : ((n2 >= n3) ? l = n2 : l = n3));

    printf("Largest number = %d", l);
}

说“需要左值作为左操作数赋值”

已编辑:

#include <stdio.h>

void main()
{
    int n1, n2, n3, lar;

    printf("Enter any three numbers:\n");
    scanf("%d %d %d", &n1, &n2, &n3);

    lar = n1 >= n2 ? n1 : n2;
    lar = lar >= n3 ? lar : n3;

    printf("Largest number = %d", lar);
}

除了必须分解为 2 个部分外,这一个有效

?: 的优先级高于 =。你应该这样做:

better_name_than_l = (n1 >= n2) ? n1 : ((n1 >= n3) ? n1 : ((n2 >= n3) ? n2 : n3))

作为奖励,代码从“非常不可读的混乱”变成了“稍微不可读的混乱”。

l (L) 是一个非常糟糕的变量名称,因为它在许多字体上看起来像 1 (one) - 以至于像 MISRA C 这样的安全标准已经明确禁止l 作为变量名。

此外,由于我们已经确定我们讨厌可读代码(这是为了代码打高尔夫球,对吧?)我们甚至可以在任何地方去掉内括号:

better_name_than_l = n1 >= n2 ? n1 : n1 >= n3 ? n1 : n2 >= n3 ? n2 : n3;

优先级 >= 高于 ?: 高于 =