現代 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標籤。