【问题标题】:Printf even though it shouldn'tPrintf 即使它不应该
【发布时间】:2016-02-25 05:18:51
【问题描述】:

我有这部分 if 语句,但我得到了一个奇怪的输出。

int x = 10;

if(1 < x < 5){
    printf("F\n");
}

为什么打印“F”?如果 x 大于 1 但不小于 5,逻辑上不是 if 语句为假吗?

【问题讨论】:

标签: c if-statement


【解决方案1】:

在 C 中,您不能像这样链接比较。表达式1 &lt; x &lt; 5 被计算为(1 &lt; x) &lt; 5:所以对于x = 10,表达式为(1 &lt; 10) &lt; 5(1 &lt; 10) 为真,C 表示为值1,因此表达式简化为1 &lt; 5。这总是正确的,如果执行了你的 printf()。

正如 level-999999 所说,在 C 中,您需要明确地将单个比较与 &amp;&amp;|| 结合起来。

【讨论】:

    【解决方案2】:

    如果您使用的是 C,您应该将条件分解为两个参数:

        if ( x > 1 && x < 5) {
            printf("F\n");
        }
    

    【讨论】:

    • 我的问题不是还是假的吗?
    • 是的。但正如@Chogo 所说。您在 if() 中设置的条件可能会导致编译器误解它。我尝试用 C 中的故障条件对其进行编码,但它没有打印任何内容。
    • @Exikle 不,不管x 的值如何,你写的表达式都是真的。
    猜你喜欢
    • 2013-07-29
    • 2019-06-26
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多