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

C语言计算器程序Else If语句未正确执行仅触发错误分支

问题原因分析
  • 运算符读取语句scanf("%ch",&op);存在两处致命错误:
    • 格式符误用:C语言中读取单个字符的格式控制符是%c,多余的h会导致scanf匹配规则异常,无法正确读取输入的运算符
    • 输入缓冲区残留问题:前两次调用scanf读取浮点数时,按下的回车键会在输入缓冲区留下一个换行符\n,如果直接用%c读取会优先拿到这个换行符,自然无法匹配+ - * /的判断条件
  • 缺少合法程序入口:#include<stdio.h>之后直接写代码块不符合C语言语法规范,必须显式声明main函数作为程序入口
修复后可正常运行的代码
#include<stdio.h>
int main(void)
{
    float no1, no2, ans;
    char op;

    printf("ENTER 1ST NUMBER:\n");
    scanf("%f",&no1);
    printf("ENTER 2ND NUMBER:\n");
    scanf("%f",&no2);
    printf("ENTER A BASIC MATHEMATICAL OPERATOR:\n");
    // %c前加空格用于跳过所有前置空白字符(换行、空格等)
    scanf(" %c",&op);

    if(op=='+')
    {
        ans = no1 + no2;
    }else if(op=='-')
    {
        ans = no1 - no2;
    }else if(op=='*')
    {
        ans = no1 * no2;
    }else if(op=='/')
    {
        // 额外增加除数为0判断,避免运行异常
        if(no2 == 0) {
            printf("DIVISION BY ZERO IS NOT ALLOWED!!\n");
            return 1;
        }
        ans = no1 / no2;
    }else
    {
        printf("INVALID OPERATOR!!\n");
        return 1;
    }

    printf("ANSWER=%.2f\n", ans);
    return 0;
}
修复说明
  • 补全了int main(void)作为程序合法入口
  • 将scanf("%ch",&op);修改为scanf(" %c",&op);,%c前的空格会自动跳过输入缓冲区中残留的所有空白字符,确保读取到的是用户输入的运算符
  • 新增了异常分支的提前返回逻辑,避免未初始化的ans变量输出垃圾值
  • 可选增加了除数为0的判断逻辑,避免除以0的运行时异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:36:05