構造化プログラミングを行うことで、プログラムが分かりやすくなるのですが、
時として冗長的で、長いプログラムになる場合があります。
そこで現在のプログラミングスタイルでは、繰り返しを強制的に終了させる場合と、
残りをスキップして繰り返しを継続させる場合に使う特別なgotoの使用を許しています。
この特別なgoto文は言語仕様の中で始めから用意されているのが普通で、C言語では、breakとcontinueがそれになります。
breakは、do〜while 、while、 for 繰り返しで使い、その繰り返しを強制終了させる命令で、
continueは、繰り返し範囲で、残りの記述をスキップして繰り返しを継続する命令です。
なお、繰り返しに対してではないのですが、returnも関数を強制終了できるので、
結果的に繰り返し終了に使われる場合があります。
これら例を以下に示します。
100以上の入金だけを取り扱って、その入金回数と 合計をグローバル変数に記憶する関数を定義し、 それを2回呼び出して平均を算出する実行例(赤が入力です)とプログラム例です。 プログラムによって、【1】のコメントの行が複数で存在し、少しだけ冗長的なプログラムになります。
1回目入金>200 2回目入金>150 3回目入金>80 3回目入金>250 4回目入金>end 100円以上の入金平均額は200です。 4回目入金>400 5回目入金>100 6回目入金>100 7回目入金>200 8回目入金>end 100円以上の入金平均額は200です。
#include <stdio.h> int sum; /* 合計 */ int count; /* 入力回数 */ void input_sum() { int data; /* 入力データ用 */ printf("%d回目入金>", count+1 );/* 【1】*/ while( fscanf(stdin, "%d" , & data) == 1){ if(data >= 100){ sum += data; count++;/* 回数計数 */ } printf("%d回目入金>", count+1 );/* 【1】をコピーした同じ記述 */ } fflush(stdin); /* 入力バッファにある情報を破棄する */ } main() { input_sum(); printf("100円以上の入金平均額は%dです。\n", sum/count); input_sum(); printf("100円以上の入金平均額は%dです。\n", sum/count); }
上記を、 へ変更します。
なお参考に、for文におけるbreakやcontinueの実行移動位置を、矢印により示します。
下記の矢印では青がcontinue、赤がbreakを実行した時に移動する位置を示します。