
所謂後測試迴圈就是迴圈的重複工作會先做一次,然後才進行結束的條件測試。 do 與 while 都是關鍵字之一,由於 do-while 迴圈沒有要求一定要有迴圈的控制變數,因此常用於不固定次數的應用,也就是我們並不確定何時迴圈會結束的情況。
使用 do-while 迴圈要注意一點, while 後接小括弧,小括弧裡為迴圈結束條件的測試,小括弧後須接分號。
然而 do-while 迴圈也可用於固定次數的應用,這時候就類似 for 迴圈,加入控制變數即可,如下圖

我們將建立擲骰子的亂數表當作例子,把原本的 for 迴圈用 do-while 改寫,如下
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int points1[10]; // 第一組骰子表格
int points2[10]; // 第二組骰子表格
int temp; // 暫存變數
int i; // 迴圈用變數
srand(time(NULL));
// 利用迴圈取得骰子點數,然後存入表格
i = 0;
do {
temp = rand() % 6;
if (temp == 0) {
temp = 6;
}
points1[i] = temp;
temp = rand() % 6;
if (temp == 0) {
temp = 6;
}
points2[i] = temp;
i++;
} while (i < 10);
// 印出表格內的值
printf("第一個骰子點數表為 ");
i = 0;
do {
printf("%d ", points1[i]);
i++;
} while (i < 10);
printf("\n");
printf("第二個骰子點數表為 ");
i = 0;
do {
printf("%d ", points2[i]);
i++;
} while (i < 10);
printf("\n");
return 0;
}
/* 《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:dice3.c
功能:簡單的擲骰子遊戲
作者:張凱慶
時間:西元2010年7月 */ 注意,凡是替變數 i 設初值,也就是設為 0 ,這絕對不可以放到 do 後面的大括弧中,不然很容易形成無窮迴圈,不會停止結束。另外 i++ 一定要有,不然結束條件永遠會是 0 < 10 ,這也形成無窮迴圈。
使用後測試 do-while 迴圈仍是看應用,前測試的 while 迴圈比較常用,不過有些情況仍會是 do-while 比較適合。
問題與討論
- 想一想,什麼情況適合用後測試的 do-while 迴圈?
- 為什麼說 do-while 迴圈常用於不固定次數的應用?
沒有留言:
張貼留言