跳转到内容

现代 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;
		}
	}
}
华夏公益教科书