![C++从零开始学(视频教学版)(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/128/29977128/b_29977128.jpg)
上QQ阅读APP看书,第一时间看更新
5.7 疑难解惑
疑问1 do-while和while有什么区别?
对于do-while,当流程到达do后,立即执行循环体语句,然后对条件表达式进行判断。若条件表达式的值为真(非0),则重复执行循环体语句,否则退出,即“先执行后判断”的方式。
while语句是先判断后执行,有可能一次都不执行循环体。
do-while结构与while结构中都有一个while语句,很容易混淆。为明显区分它们,do-while循环体即使是一个单语句,习惯上也使用花括号包围起来,并且while(表达式)直接写在花括号“}”的后面。这样的书写格式可以与while结构清楚地区分开来。
疑问2 条件语句如何嵌套?如何匹配else子句?
if语句中的执行语句又是if语句,就构成了if语句嵌套的情形。
其一般形式可表示如下:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P106_14150.jpg?sign=1738922994-ekk7EYZXYvaaMFmxHK7Vt33cqTxLOkK4-0-4c2bb8c0083b369a89e18d8e1daff2ef)
或者为
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P106_14031.jpg?sign=1738922994-BYgcVANWW4qCTIUw2y0a57zOki3gIMsz-0-3e3ea9051e5d8ef6e7245a3e06cf39de)
在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。
例如:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P106_14152.jpg?sign=1738922994-6vqIQH23xg4DIlvQLs5L93kXg1ynaoS9-0-4faee0a6e20db5fadae79d35bc4de63a)
其中的else究竟与哪一个if配对呢?
应该理解为:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P106_14153.jpg?sign=1738922994-GEBhYYnwygDRNFTq5XHoDJNJb0LyGGqv-0-a5c228d66b5f5d51118a5a4994f87888)
还是应理解为:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P106_14154.jpg?sign=1738922994-JgXr8dmBg24E1MkwvBITK0ITnA0Xu1D5-0-2356197aa7d011feac7de97b98378f09)
为了避免这种二义性,C++语言规定,else总是与它前面最近的if配对,因此对上述例子应按前一种情况理解。
疑问3 switch语句的执行顺序是什么?
switch中case后的语句是自上而下执行的,遇到break才会跳出switch。