C语言中的“else悬挂”问题

在C语言中,编译器通常将else与上一个(最近的)if进行匹配,除非通过花括号来制定匹配关系。看下面一个例子:

//Example 1:    x = 11, y = 9
#include <stdio.h>

int main()
{
    int x, y;
    x = 11;
    y = 9;
    if ( x < 10 )
    if ( y > 10 )
    printf( "*****\n" );
    else
    printf("#####\n");
    printf("$$$$$\n");
    
}

其输出为

$$$$$

由于else是与最近的if响匹配,所以上述代码实际上与下面的代码功能一致:

//Example 2:    x = 11, y = 9
#include <stdio.h>

int main()
{
    int x, y;
    x = 11;
    y = 9;
    if ( x < 10 ) {
        if ( y > 10 )
        printf( "*****\n" );
        else
        printf("#####\n");
    }
    printf("$$$$$\n");
    
}

如若改变x和y的值,如下面所示:

//Example 2:    x = 9, y = 11
#include <stdio.h>

int main()
{
    int x, y;
    x = 9;
    y = 11;
    if ( x < 10 )
    if ( y > 10 )
    printf( "*****\n" );
    else
    printf("#####\n");
    printf("$$$$$\n");
    
}

根据Example 2 的分析,不难知道运行结果为:

*****
$$$$$

再接着看下面一个例子:

//Exmaple 3: x = 9, y = 11
#include <stdio.h>

int main()
{
    int x, y;
    x = 9;
    y = 11;
    if ( x < 10 ) {
        if ( y > 10 )
        printf( "*****\n" );
    }
    else {
        printf("#####\n");
        printf("$$$$$\n");
    }
}

与前面的例子相比,代码上唯一区别就是加了两对花括号“{ }”,而功能上else只与第一个if相匹配,容易看出,输出为:

*****

交换x,y的值,x = 11,y = 9,输出为:

#####
$$$$$

总结:在没有花括号约束的情况下,else总是与它最近的if相匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值