![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=1738999533-mCa2EygVAbm4PMOO7nZSztkd9FXUkmRl-0-b761cb82ed0b32429a27c50313b86606)
或者为
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P106_14031.jpg?sign=1738999533-7vjFcM0TNVOx0yWQ8NJSeZDzMRTnG2ij-0-59f41bb2b9238e52a3825c5ac3cddff9)
在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。
例如:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P106_14152.jpg?sign=1738999533-xJKYDWjR2OGiFl23kS0PNZSV5rLyc0sS-0-29f5ec8b244d9863d46e19d6aa87746f)
其中的else究竟与哪一个if配对呢?
应该理解为:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P106_14153.jpg?sign=1738999533-b7UyOIb9MadA84IRRf6eLMcsP0bAyblq-0-e1482726fe8061165b167343ed85a8ee)
还是应理解为:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P106_14154.jpg?sign=1738999533-9aFeNo1jh2FcMY2xnrcyQ9J0JsLpdczH-0-4ae6690cfa0da5270f9ddab21d192bc1)
为了避免这种二义性,C++语言规定,else总是与它前面最近的if配对,因此对上述例子应按前一种情况理解。
疑问3 switch语句的执行顺序是什么?
switch中case后的语句是自上而下执行的,遇到break才会跳出switch。