【问题标题】:Else condition not working even tho there is no error [duplicate]即使没有错误,其他条件也不起作用[重复]
【发布时间】:2021-07-08 19:55:06
【问题描述】:

我正在使用 if else 条件在 c 中制作一个程序,它运行得非常好,没有任何错误,但它没有运行 else 条件(即,即使我给它提供了应该打印 else 条件的输入,它是给我 else if 条件而不是 else 条件),这是代码

if(Number_Of_People==1){
        printf("Show us your identification so we can proceed!");
    }
    else if(1<Number_Of_People<=6){
        printf("Show us the identification of each member so that we can proceed!");
    }
    else 
    {
        printf("Sorry, we dont have rooms for so many people!");
    }

【问题讨论】:

  • 1&lt;Number_Of_People&lt;=6 并不代表您认为的意思。它等价于(1 &lt; Number_Of_People) &lt;= 6,并且由于1 &lt; Number_Of_People 始终计算为0 或1,因此整体条件将始终计算为1 (true)。
  • 顺便说一句,尝试使用GCC 编译器作为gcc -Wall -Wextra -g。它肯定会通过发出警告来捕获此类错误....
  • 你想要:else if ((1 &lt; Number_Of_People) &amp;&amp; (Number_Of_People &lt;= 6)) {
  • 我实际上并没有包含程序的那部分,我使用printf和scanf从用户本身获取人数的值,代码很大所以我没有在这里包含它

标签: c if-statement relational-operators


【解决方案1】:

if 语句中的表达式

 else if(1<Number_Of_People<=6){

可以等效地改写为

 else if( ( 1 < Number_Of_People ) <=6 ){

关系运算符 &lt; 产生 0 或 1,具体取决于具有关系运算符的表达式在逻辑上是假还是真。

因此,子表达式( 1 &lt; Number_Of_People ) 等于0 或1 的结果在任何情况下都小于6

因此,如果前面的 if 语句将被跳过,则该 if 语句将始终被评估。

上面的 if 运算符需要重写

else if( ( 1 < Number_Of_People ) && ( Number_Of_People <= 6 ) ){

【讨论】:

    【解决方案2】:

    这个:

    if(1<Number_Of_People<=6)
    

    没有做你认为的事情 - 考虑一下:

    else if(Number_Of_People > 1 && Number_Of_People<=6)
    

    请注意,大于 1 的检查实际上只查找 0 或负值,因为您在第一种情况下明确检查 1。

    【讨论】:

    • 哦,我明白了,您需要使用 && 运算符分隔两个条件
    猜你喜欢
    • 2018-07-25
    • 2012-10-19
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多