蟒蛇客 2026-03-19 10:44 采纳率: 0%
浏览 19

这段代码有什么问题?

C语言入门的输入三个数,输出最大值的题目
以下是问题代码:

#include<stdio.h>
int main()
{int max(int x,int y,int z);
int a,b,c,p;
printf("input a&b&c:");
scanf("%d,%d,%d",&a,&b,&c);
p=max(a,b,c);
printf("max=%d\n",p);
return 0;
}

int max(int x,int y,int z)
{int k=x;
if(x>y)k=x;
else k=y;
if(z>k)k=z;

return(k);
}

输入1,2,3,输出结果是max=29\n
已知:
1.改变输入的数值并不会改变输出结果
2.在另一台电脑上运行的结果依然是错误的,但是输出的结果是max=33\n
3.删掉if(z>k)k=z;语句后,k的赋值是正常的,经过这一句就变成奇怪的量了

二编:在另一台电脑上运行的是正常的,之前漏打了p=max(a,b,c);这一行,输出的结果和错误结果一样,但是还是不理解为什么在原来的电脑上不正常

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2026-03-19 10:45
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    这段代码存在多个问题,导致输出结果不符合预期。以下是详细分析和解决方案:


    一、问题分析

    1. 函数声明与定义不一致

    • main() 函数中,你声明了 int max(int x, int y, int z);,但在 main() 中并未调用它。
    • 你试图将 p = max(a, b, c);,但代码中并没有执行这一步,而是直接打印了未初始化的变量 p

    错误点:

    int a,b,c,p;
    printf("input a&b&c:");
    scanf("%d,%d,%d",&a,&b,&c);
    printf("max=%d\\n",p); // p 未被赋值!
    

    2. 未调用 max 函数

    • 虽然你定义了 max() 函数,但没有在 main() 中调用它来获取最大值。

    错误点:

    // 没有调用 max() 函数
    p = max(a, b, c); // 这一行缺失
    

    3. 格式化字符串错误

    • scanf("%d,%d,%d",&a,&b,&c); 的格式字符串中使用了逗号(,),但输入时用户通常不会输入逗号,而是空格或换行符。这样会导致 scanf 无法正确读取输入。

    错误点:

    scanf("%d,%d,%d",&a,&b,&c); // 格式字符串应为 "%d %d %d"
    

    4. 未初始化变量 p

    • p 是一个未初始化的局部变量,其值是随机的,因此输出可能是任意值(如 2933)。

    错误点:

    int a,b,c,p; // p 未初始化
    

    二、解决方案

    1. 正确调用 max 函数并赋值给 p

    • main() 中调用 max() 函数,并将结果赋给 p

    2. 修正 scanf 格式字符串

    • 使用 %d %d %d 替代 %d,%d,%d,以匹配用户输入方式。

    3. 初始化变量 p

    • 在使用前初始化 p 为 0 或其他默认值。

    4. 确保函数定义在 main 函数之后

    • C语言要求函数必须先声明或定义后才能使用。

    三、修改后的完整代码

    #include <stdio.h>
    
    // 函数声明
    int max(int x, int y, int z);
    
    int main()
    {
        int a, b, c, p = 0; // 初始化 p
    
        printf("input a&b&c: ");
        scanf("%d %d %d", &a, &b, &c); // 修正格式字符串
    
        p = max(a, b, c); // 正确调用 max 函数
    
        printf("max=%d\n", p); // 输出正确结果
    
        return 0;
    }
    
    // 函数定义
    int max(int x, int y, int z)
    {
        int k = x;
        if (x > y) k = x;
        else k = y;
        if (z > k) k = z;
    
        return k;
    }
    

    四、关键点总结

    • 函数调用:确保在 main() 中调用 max() 并将结果赋给变量。
    • 输入格式:使用 %d %d %d 代替 %d,%d,%d
    • 变量初始化:避免使用未初始化的变量。
    • 函数定义顺序:确保函数定义在 main() 之后或提前声明。

    五、运行示例

    输入:

    1 2 3
    

    输出:

    max=3
    

    输入:

    5 7 3
    

    输出:

    max=7
    

    如有更多疑问,欢迎继续提问!

    评论

报告相同问题?

问题事件

  • 修改了问题 3月20日
  • 修改了问题 3月19日
  • 创建了问题 3月19日