跳转到内容

现代 C++:精华部分/切换操作

来自 Wikibooks,开放世界中的开放书籍

在上一章中,您收到了第一个任务:编写一个简单的计算器。当时,if 语句是您唯一可以用来做出决定的方法;本章介绍了 **switch 语句**,它的工作方式类似于 if 语句,但更适合像计算器这样的问题。

这是一个基于 switch 语句构建的计算器

#include <iostream>
#include <string>

int main()
{
	std::string input;
	float a, b;
	char oper;
	float result;

	std::cout << "Enter two numbers and an operator (+ - * /).\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; // DON'T
	case '-':
		result = a - b;
		break; // FORGET
	case '*':
		result = a * b;
		break; // THESE
	case '/':
		result = a / b;
		break; // !!!
	}

	std::cout << a << " " << oper << " " << b << " = " << result << "\n";
}

std::stof 类似于 std::stoi,但它转换为浮点数。

input[0] 是字符串 input 中的第一个字符。每当您看到带有数字(或变量)的方括号时,数字都是从 0 开始的。这意味着人们通常所说的“第一个”字符在索引 0 处,“第二个”字符在索引 1 处,依此类推。

switch 语句与您为自己的计算器编写的 if-else 链具有完全相同的效果。请注意,每个 case 标签都有一个匹配的 break 语句;请确保您编写的任何 switch 语句都是这样,因为否则您可能会得到一些非常奇怪的行为。具体来说,如果没有 break 语句,控制将直接流过所有标签,导致它们下面的逻辑在多种情况下被执行。

  • 探索当您将一个 int 除以另一个 int 时会发生什么,以及这与使用两个 float 和一个 int 和一个 float 进行相同的操作有何不同。与您的讲师讨论您的发现。
switch 语句
使用它的表达式来选择要跳转到的哪个 case 标签。
现代 C++:精华部分
 ← 现在变得有趣了。 切换操作 循环操作 → 
华夏公益教科书