【问题标题】:If statement without curly braces - C language没有花括号的if语句——C语言
【发布时间】: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


    【解决方案1】:
    if (b<c) x=b;
    else x=c;
    

    从外部if 的角度来看,上面是一个单独的 if-else 语句。

    【讨论】: