C语言这段代码为什么出错

可以运行,但出来都结果是错的,是一串长数码
负数,是环境不对,还是VS2022软件出错了吗?请指点。

img

代码不规范🤨


#include <stdio.h>

// 函数声明
int max(int x, int y, int z);

int main() {
    int a, b, c, d;
    printf("请输入三个数:\n");
    scanf_s("%d %d %d", &a, &b, &c);
    d = max(a, b, c);
    printf("max = %d\n", d);
    return 0;
}

// 函数定义
int max(int x, int y, int z) {
    int i;
    if (x > y)
        i = x;
    else
        i = y;
    if (x > z)
        i = x;
    else
        i = z;
    if (y > z)
        i = y;
    else
        i = z;
    return i;
}


scanf
输入格式有问题
用逗号隔开,注意中英文模式

您好,您的MAX函数实现中感觉有问题,既然您将x,y中的最大值已经放入了i,哪您可以直接用i和z去比较,然后确认i和z谁更大。
或者您也可以用三目运算符去处理:
return ((x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z)

你的scanf函数使用逗号,分割,输入时也要按逗号分割,例如7,8,9
另外你的max函数有逻辑错误,不信你输入9,8,7试试

【以下回答由 GPT 生成】

问题出现在max函数中的比较逻辑上。当输入的三个数都相同时,没有处理这种情况。在这种情况下,函数没有给变量i赋初值,导致返回了一个未初始化的变量。为了解决这个问题,可以在函数max中添加一个判断条件,当x、y、z都相等时,直接将i赋值为x、y或z中的任意一个即可。

以下是修改后的代码:

#include<stdio.h>

int max(int x, int y, int z) {
    int i;
    if (x > y && x > z) {
        i = x;
    } else if (y > x && y > z) {
        i = y;
    } else if (x == y && y == z) {
        i = x;  // 或者 i = y; 或者 i = z;
    } else {
        i = z;
    }
    return i;
}

int main() {
    int a, b, c, d;
    printf("请输入三个数:\n");
    scanf("%d %d %d", &a, &b, &c);
    d = max(a, b, c);
    printf("max = %d\n", d);
    return 0;
}

这样就可以正常处理输入三个数相等的情况了。



【相关推荐】



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