今天第一次学C 要求三个数最大值 捣鼓半天还是没搞对

输出的一直都是一个数 我想用main 和 max两个函数来写 求指点
#include <stdio.h>
int main()
{
int max(int x,int y,int z);
int a,b,c,d;
printf("请输入三个数字,数字用“,”隔开\n");
scanf("%d,%d,%d",&a,&b,&c);
d=max(a,b,c);
printf("The max is %d\n",d);
return 0;
}
int max(int x,int y,int z)
{
int V;
if(x>y)
{
if(x>z)
V=x;
else V=z;
}
if(y>x)
{
if(y>z)
V=y;
else V=z;
}
return(V);
}

存在优化空间,考虑你今天一次学C,用最简单的实现方式

img

#include <stdio.h>

int max(int x, int y, int z)
{
    int max = 0;
    // 合计有三个数字,分两次比较就好了
    // 第一次:找到前两个数字中最大的那个
    if (x > y)
    {
        max = x;
    } 
    else
    {
        max = y;
    }

    // 第二次:比较 z 和 max 谁更大
    if (max > z)
    {
        // 什么也不用做
    } 
    else
    {
        max = z;
    }

    return max;
}

int main()
{
    int a, b, c, d;
    printf("请输入三个数字,数字用“,”隔开\n");
    scanf("%d,%d,%d", &a, &b, &c);
    d = max(a, b, c);
    printf("The max is %d\n", d);
    return 0;
}

你的算法本身是没问题的,可以实现比较大小并得到正确答案,我第一次学C语言的答案跟你的写法是几乎一致的。后续就差不多是楼上兄弟的写法,再后续就可以考虑三目运算符,C语言三目运算符可能你还没学,后面会学到,省掉很多if判断, a>b? a:b 如果a大于b则返回:前面的a,如果a小于b则返回:后面的b

#include <stdio.h>
int max(int a, int b, int c)
{
    return (a > b ? a : b) > c ? (a > b ? a : b) : c;
}

int main()
{
    int a, b, c, d;
    printf("请输入三个数字,数字用“,”隔开\n");
    scanf("%d,%d,%d", &a, &b, &c);
    d = max(a, b, c);
    printf("The max is %d\n", d);
}