<style>
html, body, .ui-content {
background-color: #333;
color: #ddd;
}
body > .ui-infobar {
display: none;
}
.ui-view-area > .ui-infobar {
display: block;
}
.markdown-body h1{
color: #9CCEF2;
}
.markdown-body h2,
.markdown-body h3{
color: #B1D6CA;
}
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
color: #ddd;
}
.markdown-body h1,
.markdown-body h2 {
border-bottom-color: #ffffff69;
}
.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
color: #fff;
}
.markdown-body img {
background-color: transparent;
}
.ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a {
color: white;
border-left: 2px solid white;
}
.expand-toggle:hover,
.expand-toggle:focus,
.back-to-top:hover,
.back-to-top:focus,
.go-to-bottom:hover,
.go-to-bottom:focus {
color: white;
}
.ui-toc-dropdown {
background-color: #333;
}
.ui-toc-label.btn {
background-color: #191919;
color: white;
}
.ui-toc-dropdown .nav>li>a:focus,
.ui-toc-dropdown .nav>li>a:hover {
color: white;
border-left: 1px solid white;
}
.markdown-body blockquote {
color: #bcbcbc;
}
.markdown-body table tr {
background-color: #5f5f5f;
}
.markdown-body table tr:nth-child(2n) {
background-color: #4f4f4f;
}
.markdown-body code,
.markdown-body tt {
color: #eee;
background-color: rgba(230, 230, 230, 0.36);
}
a,
.open-files-container li.selected a {
color: #5EB7E0;
}
</style>
###### tags: `tgirc早修book`
# switch
switch 是多重條件判斷的陳述式,在某些情況下會比 `if else` 來的有效率
## 基本架構
```cpp=
#include <iostream>
using namespace std;
int main(){
switch(變數名稱或運算式){
case 符合數字或字元:
陳述句一;
break;
case 符合數字或字元:
陳述句二;
break;
default:
陳述句三;
break;
}
return 0;
}
```
在一開始的括號中,存放著數值或是運算式,找到符合 `case` 的值後就會執行指令,直到遇到 `break` 才會離開 switch,`case` 沒有加上 `break` 的話,就會一路跑下去,直到遇到下一個符合條件的 `case` 中的 `break` 或是跑入 `default` 中並執行指令,如果不需要 `default` 執行什麼事,則可以省略
## 範例
<font color="F5F6B6">**範例 1**</font>
為了食物的品質,海綿寶寶被要求做出的美味蟹堡的美味分數都要在 7 分以上,滿分 10 分,否則通通都要拿去倒掉,派大星則是過來協助幫忙把要丟掉的美味蟹堡分隔開來,但顯然冒失的派大星無法勝任這份工作,請撰寫一份程式幫忙他吧!
```cpp=
#include <iostream>
using namespace std;
int main(){
int score;
while(cin>>score){
switch(score){
case 10:
cout<<"It's really d3lic1Ou2.\n";
break;
case 9:
cout<<"It's really d3lic1Ou2.\n";
break;
case 8:
cout<<"It's really d3lic1Ou2.\n";
break;
case 7:
cout<<"It's really d3lic1Ou2.\n";
break;
default:
cout<<"~!@#$%^&*()_+\n";
break;
}
}
return 0;
}
```

<font color="F5F6B6">**範例 2**</font>
呈上題,每次都需要一行一行輸出太累了,可以設定一個區間,只要變數的值符合這個區間就執行指令
```cpp=
#include <iostream>
using namespace std;
int main(){
int score;
while(cin>>score){
switch(score){
case 7 ... 10:
cout<<"It's really d3lic1Ou2.\n";
break;
default:
cout<<"~!@#$%^&*()_+\n";
break;
}
}
return 0;
}
```
:::info
撰寫時要記得,... 的左右都需要加上空白
:::

除此之外,`default` 也可以放在最上方
```cpp=
#include <iostream>
using namespace std;
int main(){
switch(變數名稱或運算式){
default:
陳述句三;
break;
case 符合數字或字元:
陳述句一;
break;
case 符合數字或字元:
陳述句二;
break;
}
return 0;
}
```
`default` 在最下方時,可以不用加上 `break`,但置於最上方時一定要加上 `break`,因此建議都加上 `break` 避免執行錯誤