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

C语言中`x != 0 || x != 1`逻辑表达式判断异常问题咨询

问题

我在C语言中练习实现逻辑非门时遇到了问题。为确保输入仅为0或1,我用表达式if (number != 0 || number != 1)判断int类型变量number,预期输入非0/1时返回-1,输入0/1时返回取反值。但实际输入0或1时,该表达式都判定为真,测试代码里输入0或1会输出"Not 0 nor 1",但单独用if (number != 0)时判断是对的。我是不是误解了或语句的用法?这个语句能这么用吗?

测试代码:

int main (void)
{
        int test = 0;

        printf("enter number\n");
        scanf("%d", &test);

        if (test != 0 || test != 1)
        {
                printf("Not 0 nor 1\n");
        }
        else
        {
                printf("0 or 1\n");
        }

        return 0;
}

分析与解决

你确实搞错了逻辑运算符的用法:

  • 逻辑或||的规则是只要任意一个条件为真,整个表达式就为真。
  • 输入0时,test !=0是假,但test !=1是真,假 || 真结果为真;
  • 输入1时,test !=0是真,test !=1是假,真 || 假结果还是真;
  • 不管输入什么数,test !=0和test !=1里总有一个是真的——毕竟一个数不可能同时是0和1,所以这个||表达式永远为真,永远会执行printf("Not 0 nor 1\n");。

要实现“输入既不是0也不是1”的判断,应该用逻辑与&&,它的规则是只有所有条件都为真,整个表达式才为真:

if (test != 0 && test != 1)

这样:

  • 输入0时,test !=0是假,整个表达式为假,进入else分支;
  • 输入1时,test !=1是假,整个表达式为假,进入else分支;
  • 输入其他数时,两个条件都为真,进入if分支,符合预期。

修正后的完整代码:

int main (void)
{
        int test = 0;

        printf("enter number\n");
        scanf("%d", &test);

        if (test != 0 && test != 1)
        {
                printf("Not 0 nor 1\n");
        }
        else
        {
                printf("0 or 1\n");
        }

        return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:07:09