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

C语言除法代码未定位作业要求错误 寻求排查建议

问题定位结果

这段代码没有语法层面的错误,可以正常通过编译,但存在运行时逻辑缺陷,特定输入下会直接崩溃:

  • 核心致崩缺陷:缺失除数零值校验逻辑
    故障原理:代码中divide函数直接执行n1/n2的浮点除法运算,没有提前判断n2是否为0。当用户输入的第二个参数为0时,会触发除零异常:多数运行环境下硬件会直接抛出浮点错误,操作系统会强制终止进程,表现为程序直接崩溃;即使在兼容IEEE754浮点数标准的环境中不会崩溃,也会输出无意义的无穷大(inf)或非数值(NaN),不符合除法运算的预期结果。
  • 易被误判为崩溃的次要问题:输出语句末尾未加换行符
    问题原理:C语言标准输出默认采用行缓冲机制,输出内容末尾没有换行符\n时,部分控制台不会立刻刷新缓冲区,会导致计算结果延迟显示,和后续弹出的命令行提示符拼接在一起,很容易被误认为程序卡死、崩溃。
修复后完整代码
#include <stdio.h>
void divide (float n1, float n2) {
    // 除数为0时直接返回错误提示,避免除零异常
    if (n2 == 0) {
        printf("错误:除数不能为0\n");
        return;
    }
    printf ("%f / %f = %f\n", n1, n2, n1/n2);
}
int main () {
    float n1, n2;
    printf ("Digite o primeiro valor: ");
    scanf ("%f", &n1);
    printf ("Digite o segundo valor: ");
    scanf ("%f", &n2);
    divide(n1, n2);
    return 0;
}
排查参考建议
  • 代码能通过编译不代表没有错误,除了语法错误,还要重点排查运行时逻辑问题,涉及运算的场景必须覆盖所有边界输入做测试,比如除法运算必须优先验证除数为0的场景。
  • 所有涉及用户输入的逻辑,都要提前做合法性校验,不能默认用户一定会输入符合运算要求的数值。
  • 复现崩溃时可以构造极端测试用例,比如给第二个参数分别传入正数、负数、0,就能快速定位到除零导致崩溃的问题。

内容的提问来源于stack exchange,提问作者Tio Asuma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:42:09