现代 C++:精华部分/切换操作
外观
在上一章中,您收到了第一个任务:编写一个简单的计算器。当时,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
标签。