☛ 預先判斷式回圈: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