# 迴圈
`for `
`while`
`do_while`
---
- while 迴圈定義
- 顧名思義就是當達成...條件就不斷執行大括號裡面的程式
- 小括號內與 if - else 一樣,判斷出來是 True / False
```cpp
while(//條件){
//執行程式
}
```
----
- 無限重複的 while 迴圈
- 所以只要讓小括號內永遠保持 True 就不會停下來了
- 例如:`while(1)` 或 `while(true)`
- 請小心若是要解題這樣就會超時 (TLE)
```cpp
while(1){
//statement
}
while(true){
//statement
}
```
----
- 簡單題目練習
- 使用 while 迴圈從 1 加到 10
- 設 int 變數 cnt 存當下的數字,ans 為答案
```cpp
int cnt=1,ans = 0;
while(cnt<=10){
ans += cnt;
}
cout<<ans;
```
----
- 輸入至 EOF
- 有時在題目看見直到輸入 EOF 結束,那是什麼意思?
- EOF = End Of File:直到檔案讀取完畢(輸入到沒有東西為止)
- 若題目說有多筆測試輸入且沒有說有幾筆,那也是同樣意思
- 怎麼知道已經輸入完了?
- 那就把 cin 也放進去小括號內啊
- 只要沒有繼續輸入那 cin 就會是 false,迴圈也就結束了
```cpp
int y;
while(cin>>y){
//statement
}
```
----
- 有$Q$筆測試資料
那就不能用 while(cin >> x) 了
因為有限制輸入測資資料的數量
此時我們通常習慣會用 while (Q--)
當$Q>0$時小括號內就會是 True,直到$Q<0$為止才會停,剛好執行$Q$筆
----
比較
```cpp
while(cnt--)
```
和
```cpp
while(--cnt)
```
----
`do_while`
與`while`的差別為是否先執行1次
```cpp
do{
//跑迴圈前會先執行一遍,才去檢查condition是某為true
}while(condition)
```
---
- for 迴圈的定義
- 其實 for 迴圈就是 while 迴圈的進階版
- for 迴圈在小括號裡面會有三個部分,每部分中間以分號(;)隔開
- 第一部分:初始設置,在這裡宣告你在迴圈裡需要用到的變數
- 第二部分:條件設置,這裡與 while 迴圈一樣
- 第三部分:調整變數,執行完一次迴圈後調整變數的量值
```cpp
for(part 1;part 2;part 3){
//statement
}
```
----
而三部分皆可為空
`for(;;)`
如果判斷式為空,則為true
**與while(1)一樣意思,但while不能這樣寫**
---
應用
----
可以直接在迴圈開始前宣告變數i並初始化
`for(int i=0;i<n;i++)`
----
巢狀迴圈
套兩or更多層迴圈
ex. 99乘法表
```cpp
for(int i=2;i<=9;i++)
for(int j=2;j<=9;j++)
cout<<i*j<<" \n"[j==9];
```
---
迴圈的實用工具
`continue` `break`
----
```cpp
for(int i=0;i<10;i++){
if(i==5) continue;
cout<<i<<" ";
}
```

----
```cpp
for(int i=0;i<10;i++){
if(i==5) continue;
cout<<i<<" ";
}
```

----
記得上zj練習
{"contributors":"[{\"id\":\"04b05e67-b6a9-4c04-9235-c66acad9fe35\",\"add\":2506,\"del\":601}]","title":"迴圈","description":"for whiledo_while"}