现代 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;
}
}
}