continue 文
繰り返し制御の複合文の処理の途中で、現在の処理を中断する場合はcontinue文を使います。continue文が実行されると、現在の繰り返し文の本体となっている文の残りを省略します。文の末尾に強制的に移動させるものと考えてください。continue文は、while文、do文、for文の制御対象となっている文の中でしか使うことができません。
continue;
continue文も、break文と同じようにパラメータを持ちません。繰り返し文の本体でのみ、使用することができます。break文との違いは、break文は対象となっている繰り返し文そのものから抜け出してしまいますが continue文は、繰り返し文の本体の末尾に移動するだけなので、繰り返し処理の次のステップがそのまま実行されます。
サンプル08
#include <stdio.h>
int main(void)
{
int i;
for (i = 0 ; i < 10 ; i++)
{
if (i % 2) continue;
printf ("i=%d\n", i);
}
return 0;
}
実行結果
サンプル08は、整数型の i 変数の値が10になるまで繰り返すfor文の処理の中で、i を2で割った結果が0以外であれば(すなわち偶成でなければ)continue文を実行して残りの処理を省略するというプログラムです。continue文が実行されることによって、for文の本体となっている複合文の末尾に制御が移行します。よってprintf()関数が実行されないまま、次のステップに移ります。実行結果を見れば、continue文の効果によって偶数しか出力されていないことが確認できます。
最後に
制御文を理解することで、プログラムの流れを自由にコントロールできるようになり、状況に応じて目的のコードに流れを導けます。if文やfor文のような選択や繰り返し文を使いこなせるようになれば、表現の幅が広がります。しかし、本稿でご説明した内容は、基本的な文の仕組みに留まっています。実践では、複雑なアルゴリズムを記述するための応用的な技法が、暗黙的に使われています。複雑なプログラムの流れを、シンプルでスマートなコードで書くには、十分な基礎知識に加えて、ある程度の経験が必要になるでしょう。アルゴリズムやコーディング・スタイルを解説する書籍も出版されています。
さて、今回の反復処理で、特定の文を何度も実行することができるようになりました。問題は、繰り返し処理の中で何をするかです。サンプル 06 のように、何らかのデータを生成するのも考えられます。他には、大きなデータの検索や、データ変換処理などにも使われます。そこで、ファイルやデータベースにあるような大きく列をなした情報をどのように扱えばよいのかが問題になります。100個の数を扱うために、100個の変数を用意し、管理するのは愚かです。
このような大量のデータを扱いには、配列を使います。配列は、同じ型の変数を列のように並べたもので、変数名と番号から、目的の値にアクセスできます。そこで、配列を処理するために繰り返し文が使われます。配列の詳細は、次回にご説明しましょう。