如果没有,则在C中嵌套的条件语句if

时间:2018-08-20 16:15:08

标签: c if-statement

在一本书中找到了以下代码:

if(a > b)
    if(c > b) printf("one");
    else if(c == a) printf("two");
    else printf("three");
else printf("four");

问题是: 程序将永远不会打印
a. one b. two c. three d. four

正确答案是b. two

在这里,我无法理解为什么它不会打印two,因为在给定的条件下,c可以等于a,而c可以大于b同一时间

4 个答案:

答案 0 :(得分:3)

如果a大于b,并且c不大于b,则c永远不能等于a

您可以分配条件:

one将在a > b && c > b时打印。

two将在a > b && c <= b && c == a时打印。由于c == a,这些条件等效于c > b && c <= b,永远不可能成立。

答案 1 :(得分:0)

是因为其他原因。具体来说,要获取该子句,请使用a> b和c!> b(因为如果c> b,则将打印“ one”)。因此,由于c!> b,cb,则c!= a,因此无法打印“ 2”。

答案 2 :(得分:0)

另一种查看方式,如果您以逻辑方式重写代码:

  • 如果a ≤ b,则为“四个”
  • 如果a > b AND c > b,则为“ one”
  • 如果a > b AND c ≤ b AND c = a的情况为“两个”
  • 如果a > b AND c ≤ b AND c ≠ a,则为“三”

您唯一可以重写的情况是第三个项目符号,因为使用c = a您具有:

  

如果a> b AND c≤b AND c = a

在逻辑上等同于

  

如果a> b并且a≤b

对于ab的任何值都不是真的

答案 3 :(得分:-3)

您在第4行和第5行中使用过else。 您不能两次使用else语句。