3 ループのスキップと脱出

3.1 スキップ(continue)

場合によっては、ループブロックの文を実行させたくない場合がある。このとき、 continue文を使う。通常はif文を伴って、次のように書く。
書式
	while(継続条件式){
	   文1;
	  if(制御式) continue;
	   文2;
	   文3;
	}
これは、「継続条件が正しい限り、文1と文2、文3を実行する。ただし、制御式が正しけ れば文2と文3はスキップする。」となる。当然、制御式が誤り(偽)であれば、これら文は実行されず、ブロックの外側に出る。図5にこの構文 のフローチャートを示す。ここでは、while文に、continueを用いているが、 fordo while文にも使える。いずれの構文でも、contine文に出会うと、 それ以降のループブロックが実行されない。

以下のようなプログラムが、この構文の使用例である。

	while(sum<=10000){
	   sum=sum+n;
	   n++;
	   if(sum <= 9000)contine;
	   printf("sum=%d\n",n);
	}
この構文の実行直前まで、sum=0かつn=1ならば、

sum$\displaystyle =1+2+3+\cdots+n$    

を計算する。ただし、この繰り返し文を抜けたときには、sumの値は10000を越えている。

構文の内容は、次の通りである。

図 5: contineを使って、ループブロックをスキップする構文
\includegraphics[keepaspectratio, scale=1.0]{figure/continue.eps}

3.2 脱出(break)

場合によっては、継続条件式が正しくても、構文から抜け出たい場合がある。このとき、 break文を使う。通常はif文を伴って、次のように書く。
書式
	while(継続条件式){
	   文1;
	  if(制御式) break;
	   文2;
	   文3;
	}
これは、「継続条件が正しい限り、文1と文2、文3を実行する。ただし、制御式が正しけ れば、この構文から抜ける」となる。当然、制御式が誤り(偽)であれば、これら文は実行 されず、ブロックの外側に出る。図6にこの構文のフローチャートを示す。 ここでも、while文に、break文を用いているが、fordo while文 にも使える。いずれの構文でも、break文に出会うと、構文から抜け出る。。

以下のようなプログラムが、この構文の使用例である。

	while(1){
	   sum=sum+n;
	   n++;
	   if(sum >=  10000)break;
	   printf("sum=%d\n",n);
	}
この構文の実行直前まで、sum=0かつn=1ならば、

sum$\displaystyle =1+2+3+\cdots+n$    

を計算する。ただし、breakにより、sumの値が10000以上になると、この構文から完 全に抜け出す。。

構文の内容は、次の通りである。

図 6: break文を用いた構文からの脱出
\includegraphics[keepaspectratio, scale=1.0]{figure/break.eps}

ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成16年9月10日


no counter