![C++新经典](https://wfqqreader-1252317822.image.myqcloud.com/cover/184/44510184/b_44510184.jpg)
上QQ阅读APP看书,第一时间看更新
4.2.2 if语句的嵌套
在if语句中又包含一个或者多个if语句称为if语句的嵌套。例如:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p81_85445.jpg?sign=1739284558-eWIisEX5ya4eYCFZSi1w2RrQCaLiwAUF-0-950655dee1a1e86a0f41ada09e7bd994)
这里要特别注意if与else的配对关系:else总是和它上面最近的尚未配对的if进行配对。这句话一定要记住,一定要理解好。例如如下代码:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p81_85447.jpg?sign=1739284558-1LELQwjUburxBXAWUpIWY4n4k1P9Gsk2-0-0e96e4f43e8ecd6aa9338d9b0e11f1a9)
笔者在写上面这段代码时,刻意让第一个else与最上面的if左侧对齐,故意造成视觉上的误会,但实际上,第一个else是和从上往下数第二个if配对的(也就是应该和第二个if左侧对齐)。看看如下范例,注意不要被语句的对齐所迷惑:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p81_85448.jpg?sign=1739284558-CyCZ9hrcP6UjUU7SHAKRkP2GVEvm5INg-0-8d3dca413002cc5b3b036febaeec8dca)
上面这段代码,可以加一个{}括起来,让代码看起来更清晰一些,但代码功能丝毫不发生任何改变。调整如下:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p81_85449.jpg?sign=1739284558-aLQ4e7xEI8bSuyiQARV3qFGRDuEW4ucU-0-f24bfb76c259f09171b4e230a0a36568)
所以,如果if与else数目不一致的话,为防止出错,建议增加{}来明确配对关系,这样会使代码看起来清晰易读。例如如下代码:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p82_85451.jpg?sign=1739284558-7TQpFI11FPVp13xbaFZHfDTLOH8qDM1r-0-1b9a82406cfc3b68fb914f310b1b1f5b)
上面这段代码,因为{}的存在,限定了内嵌if语句的范围,因此此时的else必定会和第一个if配对,而不再和内部的if(第二个if)配对。看看如下范例:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p82_85452.jpg?sign=1739284558-kdXSVgP3oInwvU19ds6REbnrO9Fcnp4Z-0-34af258d741a9e5ca3a077723d8a92aa)
上述范例中,如果让x的初始值为2,则执行结果会有什么变化呢?可以自己测试一下。
必须再次强调,为了防止混乱,也为了其他人能够清晰地阅读自己所写的代码,该加{}的地方一定要加,该缩进的地方也一定要缩进,如if之下的语句都是要有缩进的,可以按Tab键进行缩进,该左侧对齐的地方一定要左侧对齐。下面再提供一个范例,每位读者非常有必要将这些范例逐一练习,这是提高自身编程能力的最好方法,请牢记!
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p82_85453.jpg?sign=1739284558-PSvosS4hKLA4wXnaUdUMfFUXWR47G3ac-0-d88fddda68ac4652be618e17f8c07481)