無条件分岐と補助制御文
(GOTO, RETURN, BREAK, CONTINUE)
-------------------------------------------------------------------------------------
今回は非常に軽い部分だし、BASICでもおなじみの部分も多いのでさらっといきましょう。
おなじみのGOTO, 関数からのリターンに使うRETURN,
ループからの抜け出しに使うBREAK,CONTINUE
です。
(※)Forの仕様は旧BasicとCとで結構異なる部分があるので要注意
BASICのForの仕様については、Forループの落とし穴をご参照下さい。
Cに関しては無条件分岐と補助制御文、Forループのスゴ技もご参照下さい。
-------------------------------------------------------------------------------------
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"); } |