4个数字中第二大...我收到错误"expected : before )"

2nd greatest among 4 numbers...iam getting the error as "expected : before )"

本文关键字:错误 expected before 数字 4个      更新时间:2023-10-16
#include<stdio.h>
 #include<conio.h>

我没有得到预期的输出:before)

int main() {
      int a,b,c,d,k;
      scanf("%d %d %d %d",&a,&b,&c,&d);//input
      k=(((a>b && a>c && a>d) ? (((b>c && b>d) ? b : ((c>b && c>d) ? c:d)))) : ((b>a && b>c && b>d) ? (((a>c && a>d) ? a : ((c>a && c>d) ? c:d)))) :  (((c>a && c>b && c>d) ? (((a>b && a>d) ? a : ((b>a && b>d) ? b:d)))) : ((d>a && d>b && d>c) ? (((a>b && a>c) ? a : ((b>c && b>a) ? b:c))))));
      printf("%d",k);
      return 0;}

我认为三元运算符是某种养眼的
这真的让我想起了某种眼癌(无意冒犯)。


更好的解决方案(使用任意数量的变量)

如果我是对的,你想从a, b, cd中提取第二大数,并将其保存在k中。试试这个:

int compare_int(const void* a, const void* b)
{
    int int_a = *((int*)a);
    int int_b = *((int*)b);
    if (int_a == int_b)
        return 0;
    else if ( int_a < int_b )
        return -1;
    else
        return 1;
}
int main()
{
    int value[4];
    // set values in any order:
    value[0] = 20; //second greatest
    value[1] = -36;
    value[2] = 294;
    value[3] = 3;
    qsort(value, 4, sizeof(int), compare_int);
    // now the array is sorted by value.
    // tho the second greatest number is in value[2].
    printf("%dn", value[2]);
    return 0;
}

重新格式化你的代码

不过. .我重新格式化了你的代码:

k = (((a > b && a > c && a > d) ? (((b > c && b > d) ? b : ((c > b && c > d) ? c : d)))) : ((b > a && b > c && b > d) ? (((a > c && a > d) ? a : ((c > a && c > d) ? c : d)))) : (((c > a && c > b && c > d) ? (((a > b && a > d) ? a : ((b > a && b > d) ? b : d)))) : ((d > a && d > b && d > c) ? (((a > b && a > c) ? a : ((b > c && b > a) ? b : c))))));

等于:

k = (
        // misplaced (
            (a > b && a > c && a > d) ?
            (
                (
                    (b > c && b > d) ? b :
                    (
                        (c > b && c > d) ? c : d
                    )
                )
            )
        // misplaced )
        :
        // misplaced (
            (b > a && b > c && b > d) ?
            (
                (
                    (a > c && a > d) ? a :
                    (
                        (c > a && c > d) ? c : d
                    )
                )
            )
        // misplaced )
        :
        (
            // misplaced (
                (c > a && c > b && c > d) ?
                (
                    (
                        (a > b && a > d) ? a :
                        (
                            (b > a && b > d) ? b : d
                        )
                    )
                )
            // misplaced )
            :
            (
                (d > a && d > b && d > c) ?
                (
                    (
                        (a > b && a > c) ? a :
                        (
                            (b > c && b > a) ? b : c
                        )
                    )
                )
                // missing
                // :
                // (
                //     expression
                // )
            )
        )
    );

容易啊?
现在你可以看到你甚至放错了一些()还有一些: