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

C语言IF语句中OR逻辑判断异常,正确输入仍提示无效选项

问题原因

你的代码逻辑错误核心是IF判断中混淆了**逻辑或(||)和逻辑与(&&)**的适用场景:

  • 你当前使用的||(逻辑或)规则:只要任意一个子条件成立,整个表达式结果就为真
  • 你写的判断条件:(opc!='t') || (opc != 'c') || (opc != 'r') || (opc != 's') || (opc !='e')
    不管用户输入5个合法字符中的哪一个,都会至少满足4个「不等于其他合法字符」的子条件,因此整个if表达式永远为真,哪怕输入正确也会触发报错提示。比如你输入合法的t,此时opc!='c'这个条件是成立的,整个if判断就会触发。
修复方案

将if判断中的所有||替换为&&即可,你的需求是「当输入的字符不等于所有合法值时才报错」,符合逻辑与的规则:只有所有子条件都成立时,整个表达式才为真。

修正后的完整menu函数代码:

int menu()
{
    char opc;

    do
    {
        printf("Areas\n");
        printf("\nTriangle (nr):  \t\t\tRectangle (nr):  \n");
        printf("\nCircle (nr):  \t\t\t\tSquare (nr):  ");
        printf("\n\n\t\tOPIONS");
        printf("\n\n\t(T)riangle\n\t(R)ectangle\n\t(S)quare\n\t(C)ircle\n\t(E)nd\n\n");
        scanf(" %c", &opc);
        // 把||替换为&&
        if((opc!='t') && (opc != 'c') && (opc != 'r') && (opc != 's') && (opc !='e'))
        {
            printf("\nInvalid option, try again\n");
        }
    } while(opc!='e');
    return opc;
}
可选优化

如果需要兼容用户输入大写字符的场景(比如用户输入T而不是t),可以在scanf后加一行转小写的逻辑,需要提前引入<ctype.h>头文件:

scanf(" %c", &opc);
opc = tolower(opc); // 统一转小写,兼容大写输入

内容的提问来源于stack exchange,提问作者Dan's

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:27:00