相對於 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 單維彰