<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` # while 迴圈 當我們要執行重複的指令時,一直不斷複製相同的程式碼會很占版面,而迴圈就能幫助我們處理這種狀況。 ## 基本架構 ```cpp= #include <iostream> using namespace std; int main(){ while(條件句) { 循環指令; } return 0; } ``` :::info 條件句如果出錯,迴圈就可能會變成無窮迴圈,無法停下。 e.g. 當判斷條件為while(1)時,因為 1 永遠是 true ,所以迴圈會無限循環 每一輪迴圈開始跑之前,才會檢查條件是否符合,因此途中不符合仍然會持續運作 ::: <font color="F5F6B6">**範例 1**</font> 試著印出 1~5 吧 ```cpp= #include <iostream> using namespace std; int main(){ cout<<"1\n"; cout<<"2\n"; cout<<"3"<<"\n"; cout<<4<<"\n"; cout<<5<<"\n"; return 0; } ``` ![](https://i.imgur.com/HQVruTP.png) 使用 <font color="F5F6B6">**while**</font>: ```cpp= #include <iostream> using namespace std; int main(){ int i=1; while(i<=5){ cout<<i<<"\n"; i++; //i=i+1 } return 0; } ``` ![](https://i.imgur.com/s9tFmaf.png) 因為想要執行重複輸出這個動作,所以使用迴圈並設定一個 i 變數,當 i <= 5 時輸出 i,因為 i = 1,如果想每次輸出的數字都往上加 1,就要再放一個 `i++;` 的指令或是 `i+=1;`,表示 i=i+1 <font color="F5F6B6">**範例 2**</font> 重複輸入某數,如果它小於 3,輸出它加 3 的結果,如果大於 3,輸出它乘 3 的結果 ```cpp= #include <iostream> using namespace std; int main(){ int num; while(cin>>num){ if(num<3){ cout<<"num<3 : num+3 = "<<num+3<<"\n"; } else if(num>3){ cout<<"num>3 : num*3 = "<<num*3<<"\n"; } } return 0; } ``` ![](https://i.imgur.com/TY48gHf.png) **在不知道執行次數,但知道何種條件下要終止迴圈時,可以使用 <font color="F5F6B6">**while**</font>**,但一定要注意的是 `return 0;` 不能放在迴圈裡面,否則只會執行一次,因為沒有處理 num == 3 的情況,所以不會輸出任何東西 ## **<font color="B1D6CA">do while</font>** 和 while 相比,while 是先判斷條件是否成立,再執行程式,而 do while 則是先執行程式,再去判斷條件是否成立 ```cpp= #include <iostream> using namespace std; int main(){ do { 循環指令; } while(條件句); return 0; } ``` 透過下方的例子,可以更明顯的知道兩者的不同: <font color="F5F6B6">**while**</font> ```cpp= #include <iostream> using namespace std; int main(){ int i=0; while(i>0){ i--; //i=i-1 } cout<<i<<"\n"; return 0; } ``` ![](https://i.imgur.com/cXcNccw.png) <font color="F5F6B6">**do while**</font> ```cpp= #include <iostream> using namespace std; int main(){ int i=0; do { i--; //i=i-1 } while(i>0); cout<<i<<"\n"; return 0; } ``` ![](https://i.imgur.com/ZXWdg4P.png) :::info 使用 do while 時,務必記得在 while() 後要加上 `;` 但 while 只要做一下處理,也能達到和 do while 一樣的結果,不用特別去記 do while 的用法也沒關係 :::