判断a,b,c三数值最大值,为什么我这样写结果为0

判断a,b,c三数值最大值,为什么我这样写结果为0

#define _CRT_SECURE_NO_WARNINGS
#include
int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    int m = 0;
    scanf("%d,%d,%d", &a, &b, &c);
    if ((a > b > c) || (a > c > b))
        m = a;
    else if ((b > a > c) || (b > c > a))
        m = b;
    else if ((c > a > b) || (c > b > a))
        m = c;

    printf("%d", m);
    return 0;
}

a>b>c
->
a>b&&b>c
别的类似

参考GPT和自己的思路:

您的代码有一个语法错误。 在C语言中,不能使用“a>b>c”之类的形式来比较三个值。 您应该使用“(a > b && a > c)”之类的形式来进行这种比较。 修改您的代码如下所示:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    int m = 0;
    scanf("%d,%d,%d", &a, &b, &c);
    if ((a > b && a > c) )
        m = a;
    else if ((b > a && b > c) )
        m = b;
    else if ((c > a && c > b) )
        m = c;

    printf("%d", m);
    return 0;
}

这个代码应该可以正确地找到给定三个数的最大值。

由于三个if语句都存在问题,导致三个if语句都没有执行,因此m的初始值为0,所以打印出来的结果为0;
程序修改如下所示:
#define _CRT_SECURE_NO_WARNINGS 这个宏定义实际是可以取消的,没什么用处

#include<stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    int m = 0;
    scanf("%d,%d,%d", &a, &b, &c);
    if ((a > b)&&(a > c) )
        m = a;
    else if ((b > a ) && (b > c )
        m = b;
    else if ((c > a ) && (c > b))
        m = c;
 
    printf("%d", m);
    return 0;
}

该回答引用GPTᴼᴾᴱᴺᴬᴵ
您的代码中 if ((a > b > c) || (a > c > b)) 这样的写法是错误的。在 C 语言中,比较运算符 > 的优先级低于逻辑运算符 ||,因此这个表达式会被解析成 (a > b) > c,即先判断 a > b 的值是否大于 c 的值,而不是判断 a 是否大于 b 且 b 是否大于 c。

正确的写法应该是:

if ((a > b && a > c) || (b > a && b > c))
    m = (a > b) ? a : b;
else
    m = c;

这里使用了逻辑运算符 && 进行判断,表示同时满足两个条件。最后的求最大值使用了条件运算符 ?:,根据条件判断返回两个不同的值。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^