相對於 continue; 有一個 break; 指令。 在 for, while 或 do-while 迴圈中, 如果出現了 break; 指令,表示結束這個迴圈,執行迴圈後的下一個指令。 。明確地說,如果是
while (COND) {
...
break;
...
}
或是
do {
...
break;
...
} while (COND);
或是
for (PRE ; COND ; POST) {
...
break;
...
}
則在遇到 break; 之後,跳去執行 } 的下一個指令。
而且,break; 只對最內層的 for, while
或 do-while 迴圈生效,如果有層層相套的迴圈,要注意這個現象。
類似於 continue;,
通常 break; 都是寫在迴圈內的 if-else 結構內。
以下,我們以一個 trim 程式示範 break; 的用法。 這個程式,從 stdin 讀入文字資料, 假設每一列都不會超過 1024 個字元 (包括 LF)。 在輸出的時候,不輸出最後面的連續空白 (空格或跳格)。 換句話說,我們刪除了每一列的尾端連續空白。
#include <stdio.h>
#define BUFSIZE 1025
int getline(char[], int);
/* Delete the tail whites (trim.c) */
main () {
int n, c;
char buf[BUFSIZE];
while ((n=getline(buf, BUFSIZE)) > 0) {
for (--n; n >= 0; --n)
if ((c=buf[n]) != ' ' && c != '\t' && c != '\n')
break;
buf[n+1] = '\0';
printf("%s\n", buf);
}
}
if (buf[n] != ' ' && buf[n] != '\t' && buf[n] != '\n')
但是,我覺得這樣看起來很醜,所以用一個簡單的變數名 c 來代替
buf[n]。這樣做是個人喜好,不必要的。
以上那個程式,很容易就誤寫為
while (buf[n] == ' ' || buf[n] == '\t' || buf[n] == '\n')
--n;
這樣做,錯在哪裡呢?在於極端狀況:
如果 buf[] 裡面是一個空列呢?while 的條件恆真,
一直到 buf[0] 還是 True,這時候它不知道要停下來,
繼續去檢查 buf[-1]、buf[-2] ...
結果就錯了。
習題
注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。
Created: May 20, 2000
Last Revised: May 20, 2000
© Copyright 2000 Wei-Chang Shann 單維彰