所謂的迴圈就是可以讓程式重複執行某項特定工作的機制,典型的 for 迴圈如下圖示

for 為關鍵字之一,後面接的小括弧內需要三個運算式,三個運算式用兩個分號隔開。迴圈需要有控制變數,第一個運算式就是給控制變數設置初值,第二個運算式則是迴圈的結束條件,通常是控制變數大於或小於某個數字,第三個運算式則是調整控制變數的值,使迴圈持續進行。
由於 for 迴圈有明確的重複控制的機制,因此常用於確定重複次數的迴圈。我們以 gn4.c 為藍本,加入 for 迴圈給使用者最多猜 10 次,全部的程式碼如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #include <stdio.h> #include <time.h> #include <math.h> enum STATE {RIGHT = 1, BIG_FOUR ,BIG_FIVE, SMALL_FOUR, SMALL_FIVE}; int main( void ) { int answer = time (NULL); int guess; int diff; int state = 0; int i; int counter = 0; answer %= 25; if (answer == 0) { answer = 25; } for (i = 0; i < 10; i++) { printf ( "請猜一個數字 1 到 25: " ); scanf ( "%d" , &guess); diff = guess - answer; diff = ( int ) fabs (diff); if (guess == answer) { state = RIGHT; } else { counter++; if (guess > answer) { if (diff > 5) { state = BIG_FIVE; } else { state = BIG_FOUR; } } else { if (diff > 5) { state = SMALL_FIVE; } else { state = SMALL_FOUR; } } } if (state == RIGHT) { printf ( "猜對囉!\n" ); break ; } else if (state == BIG_FIVE) { printf ( "猜的數字比答案大....還很遠,再加把勁!\n" ); } else if (state == BIG_FOUR) { printf ( "猜的數字比答案大....不錯喔!很接近了\n" ); } else if (state == SMALL_FIVE) { printf ( "猜的數字比答案小....還很遠,再加把勁!\n" ); } else if (state == SMALL_FOUR) { printf ( "猜的數字比答案小....不錯喔!很接近了\n" ); } else { printf ( "猜錯囉!\n" ); } } if (counter == 0) { printf ( "\n\n很棒喔!一次就猜對!\n" ); } else if (counter == 10) { printf ( "\n\n一次都沒猜對,很遜欸!\n" ); } else if (counter > 5) { printf ( "\n\n總算有猜對,下次加油喔!\n" ); } else { printf ( "\n\n猜了 %d 次,不錯不錯!\n" , counter + 1); } return 0; } /* 《程式語言教學誌》的範例程式 檔名:gn7.c 功能:簡單的猜數字遊戲 作者:張凱慶 時間:西元2010年7月 */ |
for 迴圈從第 21 行開始
21 | for (i = 0; i < 10; i++) { |
到第 74 行的左大括弧結束。我們在第 13 行宣告整數變數 i 作為 for 迴圈的控制變數,另外在第 14 行宣告另一個整數變數 counter ,並同時設初值為 0 ,這個 counter 是準備用來累計使用者猜錯次數的
14 | int counter = 0; |
此外須注意接受使用者輸入,也就是要輸入猜測數字必須放在 for 迴圈之內,也就是 for 後面的大括弧之中,這樣才可以在使用者猜錯的時候,重新接受使用者的輸入猜測數字。
變數 counter 放在第 32 行,
32 | counter++; |
這是說,只要猜錯, counter 就會遞增 1 。
我們在第 54 行加入了 break 陳述
54 | break ; |
因此,只要猜對就會提前離開 for 迴圈。
來吧!來編譯玩玩看這新版本的猜數字遊戲吧!

問題與討論
- 所謂的迴圈是什麼?
- 為什麼 for 迴圈常用於確定重複次數的情況?
沒有留言:
張貼留言