c语言能不能比较负数大小?

该问题是比较三个整数大小,当我输入三个正整数或者两个正整数一个负数时都没问题,但是当有两个负数一个正数时,就会输出两次正数,这是为啥啊?


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

    if (a > b) {
        if (c > a) {
            printf("%d", c);
        }

        if (c < b) {
            printf("%d", a);
        }

        if (a > c && c > b) {
            printf("%d", a);
        }
    }

    if (b > a) {
        if (c > b) {
            printf("%d", c);
        }

        if (c < a) {
            printf("%d", b);
        }

        if (b > c && c > a) {
            printf("%d", b);
        }
    }

    return 0;
}

运行结果:

img

因为if(a>c>b){printf("%d",a); 和if(b>c>a){printf("%d",b); 这两句代码有逻辑错误,你前面两句代码第一句要表达的意思应该是a>c并且c大于b,第二句的意思应该是b>c并且c大于a,C语言里面要表达这个意思需要用到&& 这个操作符,如果是你那个的那样会先比较第一个数和第二个数,然后拿他们比较的结果的真假值(0或1)再和第三个数比较,结果显而易见是不对的。所以需要修改这两句代码,修改如下:


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

img

代码逻辑有问题,就拿a>b来说c<b和a>c>b都表示a为最大值,重复了自然会输出两次,使用if else链接判断语句

c语言能这么写吗??还有我不太明白只是要判断最大值而已,你为什么要写这么复杂?

img

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