现代 C++:精华篇/循环
外观
在本章中,我们有一个计算器,它愿意执行比你愿意输入的更多的计算。
#include <iostream>
#include <string>
int main()
{
std::string input;
float a, b;
char oper;
float result;
// The ultimate truism, this never stops being true.
while(true)
{
std::cout << "Enter two numbers and an operator (+ - * /).\nOr press Ctrl+C to exit.\n";
// Take input.
std::cin >> input;
// Parse it as a float.
a = std::stof(input);
// Take input.
std::cin >> input;
// Parse it as a float.
b = std::stof(input);
// Take input.
std::cin >> input;
// Get the first character.
oper = input[0];
switch (oper)
{
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
result = a / b;
break;
}
std::cout << a << " " << oper << " " << b << " = " << result << "\n";
}
}
这个程序将一直运行,直到你的终端停止运行它(因为你按下了 Ctrl+C 或单击了 X)。这是因为while 循环,每次控制到达其底部时,都会跳回到顶部 - 如果其条件仍然为真,在本例中它将始终为真。
如果我们不在用户可以轻松停止循环的上下文中,while(true)
将是一个非常糟糕的主意。你可以用任何布尔表达式(如 a == b
)或 bool
变量替换括号中的 true
。
假设我们希望允许最多十次迭代(通过循环),而不是无限次。我们可以这样做
int i = 0;
while(i < 10)
{
//...
i++;
}
这将正常工作。
i++
与 i = i + 1
相同,并导致 i
比以前大 1。它也与 i += 1
相同。
但是 C++ 提供了一种更漂亮的写法,即for 循环
for(int i = 0; i < 10; i++)
{
//...
}
在第一次迭代中,i
的值为 0。在最后一次迭代中,它的值为 9。它永远不会(有效地)有 10 的值,因为,就像我们在上面的等效 while 循环中一样
- 迭代运行;
- 然后
i
递增; - 然后检查
i < 10
,如果它为假,则退出循环。
尽管如此,循环确实运行了 10 次。
正在建设中
- while 循环
- 持续循环,直到其条件为假。
- 迭代
- 通过循环进行一次传递。此外,循环或“迭代”的动作。
- for 循环
- 比 while 循环更适合计数。