現代 C++:精華篇/休息一下。
外觀
到目前為止,我們只介紹了在程式中使用的內容,但還有一些令人討厭的空白。本章將填補這些空白。
我們還沒有提到另一種型別的迴圈
do
{
//...
}
while(condition);
正如你可能猜到的,這非常類似於一個 while 迴圈。一個 **do..while 迴圈** 反轉了普通 while 迴圈執行的兩個操作,它們是
- 檢查條件,如果為假,則退出;
- 執行迴圈體。
一個 while 迴圈重複這兩個步驟,直到條件測試為假。相反,一個 do..while 迴圈會像這樣重複它們
- 執行迴圈體;
- 檢查條件,如果為假,則退出。
效果是,do..while 迴圈保證一次迭代,而 while 迴圈可能根本不執行其主體。這很有用,特別是當你從其他地方(如檔案)讀取資料時,是否應該繼續取決於你讀到的內容。
迴圈可以比“開始..重複直到 X..退出”複雜得多。這種複雜性可能非常糟糕,但也可能非常有用。
例如,完成迴圈不是唯一的退出方式。還記得開關中使用的 break 語句嗎?它們也可以退出迴圈。如果你在一個迴圈中巢狀一個迴圈再巢狀一個迴圈(另一個複雜性的例子),break 只能退出最小的那個。如果你在一個迴圈中有一個開關,break 在開關內部只會退出開關。
如果你願意,可以想象一下,語言從 break 語句開始,向後搜尋程式碼,並退出找到的第一個迴圈或開關。
這是一個在迴圈中使用 break 的例子
#include <iostream>
#include <string>
int main()
{
std::string input;
int count;
std::cout << "Welcome to the lister! How many items would you like to list? > ";
std::cin >> input;
count = std::stoi(input);
std::cout << "If you change your mind, enter STOP after the last item.\n\n";
for(int i = 0; i < count; i++)
{
std::cout << (i + 1) << ". ";
std::cin >> input;
if(input == "STOP")
{
break;
}
}
}