# Ch8 處理不同輸入規則 > 搭配[green judge解題系統](http://www.tcgs.tc.edu.tw:1218/) > Special thanks to [台中女中sagit老師](http://www.tcgs.tc.edu.tw/~sagit/index.htm) \<\(\_ \_\)\> ## > 上一章:[雜項:其他資料型態、函式庫、格式化輸出](https://hackmd.io/s/r1QbUam6b) > 下一章:[陣列](https://hackmd.io/s/HJMbs-ARW) > 回目錄:[國立科學園區實驗中學C++程式語言自學講義](https://hackmd.io/s/B18yT_i5Z) ## <font color='darkblue'>這篇沒有新語法</font> 回顧我們目前寫過的程式 都只能做一次性的運算 例如算加法的程式 每次輸入完2個數字,看到電腦算出的相加結果後,程式就結束了 如果想要再算另一組加法,就要重新執行程式 如果有很多組數字想要相加,那就要重新執行好幾次程式 為了要解決這個問題 我們可以使用「迴圈」來讓程式重複執行 以下提供幾種常見的方法 ## <font color='darkblue'>N行版</font> 一開始就先告訴你總共有幾組輸入 <font color='darkorange'>【例題】</font> > 輸入一個n,代表有n組「A和B」 > 接下來會輸入n次的「A、B」,請每次都將AB相加後輸出 題目說會先給一個n來表示要做幾次運算 所以先讀入一個n ```cpp= int n; cin >> n; ``` 接下來要創造一個會被重複n次的迴圈 迴圈裡面讀入A和B,並將相加後的結果輸出 要讓迴圈固定跑n次 有兩種做法 一種用while ```cpp= while(n--) { } ``` 另一種則是用for ```cpp= int i; for(i=0;i<n;i++){ } ``` 只要把讀入A和B的程式放在迴圈裡就可以了 這邊提供其中一種範例 ```cpp= int n; int A, B; cin >> n; while(n--) { cin >> A >> B; cout << A+B << endl; } ``` > <font color="darkgreen"> 【學生練習題】</font> > - [ ] [Green Judge a037: 公平的戰役(N行版) ](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a037) ## <font color='darkblue'>0尾版</font> 一開始並不知道總共有幾組輸入 而是用輸入某個特定的值來表示「結束了」 <font color='darkorange'>【例題】</font> > 輸入資料有多組,每一組有兩個正整數 A、B > 當A和B皆為0時,代表輸入結束,不需要對這組做處理 一樣可以用while迴圈來解決 這邊提供兩種範例 1.在迴圈的最後面讀入下一次的A和B ```cpp= int n; int A, B; cin >> A >> B; while(A!=0 || B!=0){ cout << A+B << endl; cin >> A >> B; } ``` 2.利用break (break的效果為直接離開迴圈) ```cpp= int n; int A, B; while(1){ //1代表的是「一定符合」,所以寫while(1)。其實把1換成任何數字都可以,只有0是代表「一定不符合」 cin >> A >> B; if(A==0&&B==0) break; //如果A和B皆為0,直接離開迴圈 cout << A+B << endl; } ``` > <font color="darkgreen"> 【學生練習題】</font> > - [ ] [Green Judge a038: 公平的戰役(0尾版) ](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a038) ## <font color='darkblue'>EOF版</font> 一開始並不知道總共有幾組輸入 而是用EOF鍵表示「結束了」 EOF鍵就是鍵盤上的control+Z 這樣的程式有點奇葩 直接上範例 ```cpp= int n; int A, B; while(cin>>A>>B) { cout<<A+B<<endl; } ``` 如果你有輸入A和B,那麼`cin>>A>>B`這段程式就會被當成「是」 如果你是按下鍵盤的control+Z,這段程式就會被當成「否」 所以直接將這段程式當成條件判斷的用途 放在while迴圈的檢查處即可 > <font color="darkgreen"> 【學生練習題】</font> > - [ ] [Green Judge a039: 公平的戰役(EOF版) ](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a039) ## <font color='darkblue'>Case版</font> 一開始會先有一個數字n代表接下來有幾組輸入 對於每一組輸出 都要輸出那是第幾筆資料 <font color='darkorange'>【例題】</font> > 輸入一個數字n,代表接下來有幾組輸入 > 接下來有n行,每一行都是A和B > 對於每一行的A和B,輸出 > Case #i:#(A+B) > 其中#i代表的是那是第幾行 > #(A+B)則是A和B相加後的結果 > 例如輸入 > 3 > 1 2 > 3 4 > 5 6 > 則輸出 > Case 1:3 > Case 2:7 > Case 3:11 這題因為需要輸出現在是第幾組 因此需要計數器來記錄現在到第幾組了 所以用for迴圈較為合適 以下為本題範例 ```cpp= int n; int A, B; int i; cin >> n; for(i=1;i<=n;i++){ cin >> A >> B; cout << "Case " << i << ": "; cout << A+B << endl; } ``` > <font color="darkgreen"> 【學生練習題】</font> > - [ ] [Green Judge a040: 公平的戰役(Case版) ](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a040) ## ## <font color='purple'>\~恭喜你完成基礎題庫\~</font> > 上一章:[雜項:其他資料型態、函式庫、格式化輸出](https://hackmd.io/s/r1QbUam6b) > 下一章:[陣列](https://hackmd.io/s/HJMbs-ARW) > 回目錄:[國立科學園區實驗中學C++程式語言自學講義](https://hackmd.io/s/B18yT_i5Z)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up