パソコン活用研究シリコンバレー(C、C++、の活用研究)

無条件分岐と補助制御文
(GOTO, RETURN, BREAK, CONTINUE)

-------------------------------------------------------------------------------------
今回は非常に軽い部分だし、BASICでもおなじみの部分も多いのでさらっといきましょう。
おなじみのGOTO, 関数からのリターンに使うRETURN, ループからの抜け出しに使うBREAK,CONTINUE
です。
-------------------------------------------------------------------------------------

1 GOTO
BASICでもおなじみのGOTOです。以下のように使います。

ラベル:  <-------
・・・・・   |
・・・・・   |
goto ラベル; -->
  

gotoがジャンプできるのは、同じ関数内だけです。この点は注意して下さい。


2 RETURN
RETURNは、現在実行中の関数を抜け、呼び出した元の関数に制御を戻します。
その際、関数が返値を持つ場合は return (式); と記述することにより、呼び出した元の関数に
値を返すことができます。(返値のない時は、return; でよい)
以下、簡単な例ですが足し算の add() を見て下さい。

main() {
int a,b,c;
scanf ("%d, %d",&a, &b);
c = add(a,b);
printf ("%d", c);
}

add(x,y)
int x,y;
{ return(x + y);
}


3 BREAK
break は現在実行中のループ(for, whileループ)、およびswitch文を途中で抜けだすのに使います。
これは、大方の旧BASICにはない命令文です。(旧BASICではgotoでループから飛び出すしかない)

よくある使い方は、for, while で無限ループをつくり、無限ループからの抜け出しにbreak を
使う方法です。無限ループについては「
繰り返し処理と条件分岐」も参照して見て下さい。

switch文では途中で条件式に合致したcase文があっても、その後のcase文も順次全て実行されて
いきます。合致した段階でswitch文を抜け出し、以降のcase文を実行させない場合にbreakを使います。
switch文については「
繰り返し処理と条件分岐」を参照して下さい。

for (....) {
・・・・.
if (...) break; -----
・・・・      | 
}          |
          |
・・・・ <--------- forループを抜けて次の文を実行する 


while (...) {
・・・・
if (...) break; -----
・・・・      |
}          | 
           | 
・・・・ <--------- whileループを抜けて次の文を実行する


switch (...) {
case 1: ...
case 2: ...
case 3: break; ----  case 3: で抜け出して、以降のcase 4: case 5: は実行しない。
case 4: ...    |
case 5: ...    |
}         | 
         |
・・・ <-----------



4 CONTINUE 
continueも普通の旧BASICにはない命令文ですね。
continueは、ループの中で、その場で実行を中断しループの先頭に戻る時に使います。

while文の時は、ループの先頭に制御を戻し、for文の時はfor文の式3(更新条件)に制御が渡されます。

for (式1;式2;式3;) <--- 式3に制御が戻る 
{ .....         |
.......         |
if (...) continue; ------
......
}


5 サンプルプログラム
1を押すと、continueと表示し、ループの先頭に戻り、2を押すとbreakと表示しプログラムを終了する
プログラムです。それ以外のキーを押すと通常にループ(無限ループになっている)を繰り返します。


#include <stdio.h>

main ()
{ char cc;

while(1) /* 無限ループ*/
{ cc = getchar();
if (cc == '1') { printf("continue\n"); continue; }
if (cc == '2') break; }
printf ("break !! END\n"); }


TopPage