【发布时间】:2023-01-16 10:27:05
【问题描述】:
一直在看我遇到的这个问题。问题是以下 sn-p 返回什么。
int main(){
int a=1, b=2, c=3, d=4;
int x = a;
if (a>b)
if (b<c) x=b;
else x=c;
return(x);
}
据我了解,如果没有大括号的语句是允许的,并且将执行紧随其后的语句。所以在第一个条件 (a > b) 的情况下,如果为真,那么下面的行将作为语句执行。然后如果嵌套的 if 语句的条件 (b < c) 也为真,那么它后面的语句将被执行。 else 语句将“属于”第一个 if 语句。但是,将其放入编译器后,我发现 else 语句实际上属于嵌套的 if 语句并返回 1。
有人可以解释我的误解吗?在没有任何大括号的情况下,else 语句是否也属于最接近的 if 语句?
是的,我知道这是一段写得不好的代码,可读性差强人意。我不会在实践中这样做,但仍然对解释该程序的正确方法感到好奇。
我运行程序并看到它返回 1,这向我表明 else 语句实际上是嵌套 if 语句的一部分,这与没有花括号的 factif 语句相矛盾,它只执行紧随其后的行。
【问题讨论】:
标签: c if-statement nested-if