☛ 預先判斷式回圈:while
while 為預先判斷式回圈。 即先檢查條件是否為真 ( 即不等於 0 ),若為真,則執行回圈內的動作,然後跳回條件式再檢查,如此一直執行到條件不成立為止,即條件為假時才離開回圈。 預先判斷式回圈的寫法如下:
while(條件式) { 動作 }
假設條件恆真或執行動作后仍然不能使條件變為假,如:
while(1) { putchar(7); }
則這個回圈就永遠出不來,有時甚至會碰到當機。 寫程式時往往就會碰到這種情況,至於如何避開這種情形呢? 只有靠多寫程式來磨練了。 當然有時這種無限回圈是我們故意製造的,就不在此限。
範例:計算輸入字串的長度
#include<iostream.h> void main() { char str[256]; int count=0; cout<<"Please input a string:"; cin>>str; while(str[count]!='\0') { count++; } cout<<"Total input "<< count <<“ characters.\n"; }
執行結果:
Please input a string: abcde Total input 5 characters.
☛ 後設判斷式回圈:do-while
do-while 是後設判斷式回圈,也就是先做動作然後再檢查條件式的回圈控制指令,在條件成立時再回到前面執行 { } 內的動作,如此反覆形成回圈直到條件結果為 false 為止。 後設判斷式回圈的寫法如下:
do { 動作 } while(條件式);
不論條件式的結果如何,{ } 內的執行動作至少會執行一次,這是 do-while 回圈的特性,使用時依然要避免跳不出回圈的情形發生。 下面這個程式時常可以見到,程式一定要輸入 y 或 n 鍵才跳出回圈。
範例:等待使用者按下 y 或 n 的方法
#include<iostream.h> #include<conio.h> void main() { int key; cout<<"Are you sure (y/n)?"; do { key=getch(); } while((key!='y') && (key!='n')); cout<<"\nProgram end here.\n"; }
執行結果:
Are you sure (y/n)? Program end here.
☛ 回圈控制中的 break
當 while、do-while 或 for 回圈在執行中,若想立即跳出回圈的話,有二種辦法可以做得到,一是使判斷的條件不成立,這樣自然就離開 Loop 了。 另一個方法就是使用 break 指令,命令程式立即離開回圈。 通常 break 都和 if 連用,當某些條件成立後,就跳離開回圈,break 只能跳出一層回圈,若程式欲離開的地點被好幾個 { } 包圍住時,就得逐次 break,否則就要用到 goto 指令,才能使程式離開。
範例:以 break 跳出 while 回圈
#include<iostream.h> #include<conio.h> const int KeyESC=27; void main() { int key; while(1) //永遠的回圈 { key=getch(); cout << "=0x" << hex << key << endl; if(key==KeyESC) break; //用 break 跳出回圈 } cout << "You press <ESC> key!"; }
執行結果:
a = 0x61 b = 0x62 c = 0x63 ← = 0x1b 按 [ESC] You press <ESC> key!
☛ continue
當程式執行 while、do-while 或 for 時,若不想執行某次回圈,則可以使用 continue 敘述來略過該次回圈,使程式由下一次的回圈開始。 通常continue是用在回圈剩餘部分非常複雜的情形下,為了使程式清晰明瞭才使用的。 continue 並不跳離回圈,只是忽略掉了 continue 後面的敘述,而由下一次回圈繼續執行,這是 continue 與 break 不同之處。
範例:用continue來略過負數,使負數不加到總和裡
#include<iostream.h> void main() { int sum=0; int s[7]={1,-2,3,-4,5,-6,7}; for(int i=0;i<7;i++) { if(s[i]<=0) continue; sum=sum+s[i]; } cout << "SUM = " << sum; }
執行結果:
SUM = 16