You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言乘除运算函数输出异常:乘法结果为0.00的错误排查与修复

C语言代码错误分析与修复

输入x=4、y=5、z=*时输出0.00,代码存在以下错误及修复方案:

  • 运算符输入的scanf格式错误:
    原代码用scanf("%s", &z);读取单个字符运算符,但%s是字符串读取格式符,会将输入字符(如*)和字符串结束符\0一起写入内存。而z是单个char变量,仅占1字节内存,写入\0会越界覆盖相邻变量(如y)的内存值,导致y被改为0,最终计算4*0得到0.00。
    修复:改用%c格式符读取单个字符,同时为跳过之前输入整数后留在缓冲区的换行符,在%c前加空格,即scanf(" %c", &z);。

  • 除法运算的整数除法问题:
    原代码result1函数中的x/y是整数除法,当x、y为整数时会直接舍去小数部分(如5/2得到2而非2.5),不符合返回float类型结果的需求。
    修复:对其中一个操作数进行强制类型转换,将整数运算转为浮点运算,比如float r1 = (float)x / y;。

  • 非指定运算符的返回值不符合需求:
    需求要求非指定运算符返回0,但原代码else分支仅打印错误信息,未输出0.00的结果。
    修复:else分支改为printf("the result is %.2f\n", 0.0f);。


修复后的完整代码:

#include <stdio.h>
float result(int x, int y);
float result1(int x, int y);

int main()
{
    int x, y;
    char z;
    printf("enter x:\n");
    scanf("%d", &x);
    printf("enter y:\n");
    scanf("%d", &y);

    printf("enter z:\n");
    scanf(" %c", &z);

    if (z == '*')
    {
        printf("the result is %.2f\n", result(x, y));
    }
    else if (z == '/')
    {
        printf("the result is %.2f\n", result1(x, y));
    }
    else
    {
        printf("the result is %.2f\n", 0.0f);
    }
    return 0;
}

float result(int x, int y)
{
    float r = x * y;
    return r;
}

float result1(int x, int y)
{
    float r1 = (float)x / y;
    return r1;
}

内容的提问来源于stack exchange,提问作者Kazi Sayeeba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:30:55