<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; } ``` ![](https://i.imgur.com/9nwzrG1.png) <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 撰寫時要記得,... 的左右都需要加上空白 ::: ![](https://i.imgur.com/DQNOcRc.png) 除此之外,`default` 也可以放在最上方 ```cpp= #include <iostream> using namespace std; int main(){ switch(變數名稱或運算式){ default: 陳述句三; break; case 符合數字或字元: 陳述句一; break; case 符合數字或字元: 陳述句二; break; } return 0; } ``` `default` 在最下方時,可以不用加上 `break`,但置於最上方時一定要加上 `break`,因此建議都加上 `break` 避免執行錯誤