跳轉到內容

現代 C++:精華篇/休息一下。

來自華夏公益教科書,開放的書籍,開放的世界

到目前為止,我們只介紹了在程式中使用的內容,但還有一些令人討厭的空白。本章將填補這些空白。

do..while

[編輯 | 編輯原始碼]

我們還沒有提到另一種型別的迴圈

do
{
	//...
}
while(condition);

正如你可能猜到的,這非常類似於一個 while 迴圈。一個 **do..while 迴圈** 反轉了普通 while 迴圈執行的兩個操作,它們是

  1. 檢查條件,如果為假,則退出;
  2. 執行迴圈體。

一個 while 迴圈重複這兩個步驟,直到條件測試為假。相反,一個 do..while 迴圈會像這樣重複它們

  1. 執行迴圈體;
  2. 檢查條件,如果為假,則退出。

效果是,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;
		}
	}
}
華夏公益教科書