跳转至内容

现代 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 循环中一样

  1. 迭代运行;
  2. 然后 i 递增;
  3. 然后检查 i < 10,如果它为假,则退出循环。

尽管如此,循环确实运行了 10 次。

正在建设中

while 循环
持续循环,直到其条件为假。
迭代
通过循环进行一次传递。此外,循环或“迭代”的动作。
for 循环
比 while 循环更适合计数。
现代 C++:精华篇
 ← 切换事物 循环 最后,函数 → 
华夏公益教科书