苦しんで覚えるC言語 9.1 繰り返しを行う文 P172 – P178

繰り返し動作

同じ処理を指定回数だけ繰り返したい時があります。
C言語では回数が決まっている繰り返し処理に for文 を使用します。
書式は以下の様に書きます。

int i;   /* 繰り返し処理の時に使うカウント */

for(i = 1; i < 10; i++)
{
    /* 繰り返したい処理 */
}

int i; の i はコメントの通り、繰り返し処理の回数をカウントする変数として使います。
for() と書いて、()の中に繰り返しの条件を書きます。上記の場合は以下の条件で指定されています。

① i = 1  ・・・カウント変数として宣言した i に初期値として 1 を代入。
② i < 10 ・・・カウント変数 i の値が10よりも小さい間、繰り返したい処理を実行する
③ i++  ・・・カウント変数を1つだけインクリメントする。

for文の動作のイメージは、上記① ⇒ ② ⇒ ③ ⇒ ② ⇒ ③・・・になります。
①は初期化になるので、最初の1度だけ実行されます。

以降は、②を判定して真の場合は繰り返したい処理が実行されて、③のカウント変数を1つ増加になります。
参考書のコード例を見てみましょう。

#include <stdio.h>

int main(void)
{
    int i;

    for(i = 1; i <= 10; i++)
    {
        printf("メッセージ\n");
    }

    return 0;
}

① i = 1が代入される
② i <= 10を判定し、i=1なので printf(“メッセージ\n”)を実行する
③ i++でiの値を2にする
④ i <= 10を判定し、i=2なので printf(“メッセージ\n”)を実行する
⑤ i++でiの値を3にする

という感じで i が10になるまで(条件式 i <= 10)上記の動作が継続されるイメージです。
ちなみに、等価式として以下も上記と同じ条件です。

for(i = 0; i < 10; i++)
{
    printf("メッセージ\n");
}

初期値として 0 を入れて、i < 10とすることで、i = 9でprintf(“メッセージ\n”);を表示した後、
i++でi = 10となり、i < 10に合致しなくなるので終了します。
このコードも、printf(“メッセージ\n”);が10回表示されるので結果は同じです。

巷のコードでは、i=0とする初期化も良く見ます。
初期値を何で決定するかは、繰り返したい処理の内容に依存します。

0からカウントする方が都合が良いのか、1からカウントする方が都合が良いのか、
それともnからカウントする方が・・・。という感じです。

ループ動作の仕組み

基本的な動作の説明は上記の通りになります。
永遠にループを継続したい場合は以下の様に書くことで無限に継続させることが可能です。

for(;;)
{
    printf("メッセージ\n");
}

初期化の値、繰り返し回数、回数のカウント増加が全て設定されていない書き方になります。

処理を強制的に抜ける

for文を指定回数処理させる際に、条件に合致したらそれ以上の処理をやめて抜けることが可能です。それが以下の様な書き方になります。

int i;

for(i = 1; i <= 10; i++)
{
    if(i == 3)
    {
        /* for文のループ処理から抜ける */
        break;
    }
}

参考書を少し割愛して書いていますが、回数のカウント変数である i が一つずつ増加する中で、
i = 3になった時点で break にて処理をやめて抜けてきます。
その為、処理は3回しか実行されません。

breakは、switch文で出てきましたね。
caseの処理部分にbreakと書いておくことで、処理が終わったらswitch文を抜けてくるのと同じです。