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

C语言if语句无论输入条件如何均执行的问题求助

问题排查与修正方案
  • 核心问题:if分支条件逻辑错误
    你写的if(userAnswer=="Y"||"y")存在两处致命错误,这是if分支永远执行的直接原因:
    1. 单个字符常量需要用单引号'包裹,双引号"包裹的是字符串常量,二者类型完全不同,比较逻辑本身无效
    2. C语言中逻辑或||两侧是独立的布尔判断项,单独的"y"作为字符串常量,其内存地址为非0值,会被直接判定为真,因此整个if条件的最终结果永远为真。
      修正后的条件写法:
    if(userAnswer == 'Y' || userAnswer == 'y')
    
  • 问题2:double类型输入格式符错误
    scanf("%f", &phonePrice);中,%f仅适用于读取float类型变量,读取double类型必须使用%lf格式符,否则会导致输入的数值存储异常。
    修正写法:
    scanf("%lf", &phonePrice);
    
  • 问题3:输入缓冲区处理逻辑错误
    你用的fflush(stdin)属于未定义行为,C标准仅规定fflush()对输出流有效,对输入流stdin执行flush操作的效果由编译器自行决定,无法可靠清空缓冲区残留的回车换行符,会导致后续%c读取到空白字符而非用户输入的Y/N。
    解决方案二选一即可:
    1. 读取字符的格式符前加空格,自动跳过所有前置空白字符:
    scanf(" %c", &userAnswer);
    
    1. 用标准兼容的逻辑清空输入缓冲区,替换所有fflush(stdin):
    // 清空输入缓冲区直到遇到换行符
    int c;
    while ((c = getchar()) != '\n' && c != EOF);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:18:02