【C言語入門】for文の使い方(break、continue文でループ制御)

for文って使ってますか? C言語ではループ処理で同じ処理を繰り返し行うためのfor文があります。処理を繰り返す間に、ある条件で処理を省きたい場合は「break」句や「continue」句を使って、必要のない処理を省くなど処理を制御することもできます。

この記事では、for文について

  • for文とは
  • for文の使い方について

という基本的な内容から、

  • 二重ループの使い方
  • 無限ループの使い方
  • breakやcontinueを使ってループを制御する方法
  • for文とwhile文の書き換え方法

など応用的な使い方の内容についても解説していきます。今回はfor文について、使い方をわかりやすく解説します!

目次

for文とは

for文とは、ある回数処理を繰り返したい場合に使用します。for文で処理を繰り返す間に、ある条件で処理を省きたい場合は「break」句や「continue」句を使って必要のない処理を省くなど、処理の制御を行います。

また、for文と同じように処理を繰り返す構文としてwhile文があります。while文はある条件を満たす間処理を繰り返すのに対して、for文は処理を返す回数が明らかな場合に使用します。これらの使い方についてくわしく解説していきます。

for文の使い方

for文は以下のように記述します。

for (初期化式; 継続条件式; 変化式) {
    // 継続条件式がtrueのときに繰り返す処理
}

初期化式はfor文の最初に一度だけ実行されます。主にfor文で使用する変数の宣言と初期化に使用します。

継続条件式はループを繰り返し開始するたびに評価され、trueのときに「{ }」内のブロックの処理を行います。この条件式でループ処理を行う回数を指定することができます。

変化式は、ループ処理が終わるたびに実行される式です。主に継続条件式で使用している変数の値を増加させるために使用します。サンプルコードで確認しましょう。

#include <stdio.h>
 
int main(void) {
    for(int i = 0; i < 3; i++) {
        printf("%d回目の処理です\n", i + 1);
    }
    printf("処理が終了しました\n");
    
    return 0;
}

実行結果:

1回目の処理です
2回目の処理です
3回目の処理です
処理が終了しました

このサンプルコードでは変数「i」の値が3未満であれば処理を繰り返します。変化式では処理を1回繰り返すごとに変数「i」の値に1ずつ加算するように記述しています。

3回処理を繰り返すと条件を満たさなくなり、for文の繰り返しループを抜けて全ての処理が終了しています。ちなみに、for文は継続条件式を初めから満たさない場合はブロック内の処理は1度も行われず、ブロック外の次の処理に移行します。

二重ループの使い方

for文の処理のブロックの中に、さらにfor文で処理を記述したものを二重ループといいます。また、これをいくつも繰り返したものを多重ループといいます。多重ループはコードが読みにくくなるので、あまりオススメしません。

二重ループや三重ループくらいにとどめておきましょう。それでは二重ループについて、サンプルコードで確認しましょう。

#include <stdio.h>
 
int main(void) {
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            printf("%d年%d組\n", i + 1, j + 1);
        }
    }
    
    return 0;
}

実行結果:

1年1組
1年2組
1年3組
2年1組
2年2組
2年3組
3年1組
3年2組
3年3組

このサンプルコードでは、for文の処理ブロックの中にfor文を記述する2重ループを記述しています。

無限ループの使い方

for文で無限ループを回したい場合があります。無限ループとは半永久的に繰り返されるループのことです。そんな場合は以下のように記述します。

for (; ; ) {
    // 継続条件式がtrueのときに繰り返す処理
}

このように、初期化式、継続条件式、変化式をすべて記述しなければ、無限にループが回ることになります。サンプルコードで確認しましょう。ただし、無限にループが回ることになるので、あらかじめ処理を止める方法を確認してから実行しましょう。

#include <stdio.h>
 
int main(void) {
    for(; ; ) {
        
    }
    printf("処理が終了しました\n");
    
    return 0;
}

このサンプルコードの場合、for文が無限にループを回すことになります。

break文で無限ループから抜ける方法

さきほどのサンプルコードでは、for文が無限にループを回すことになってしまいました。break文を使って無限ループから抜けられるようにしておきましょう。

#include <stdio.h>
 
int main(void) {
    int i = 0;
    for(; ; ) {
        i++;
        if(i > 3) {
            break;
        }
        printf("%d回目の処理です\n", i);
    }
    printf("処理が終了しました\n");
    
    return 0;
}

実行結果:

1回目の処理です
2回目の処理です
3回目の処理です
処理が終了しました

このサンプルコードでは、for文が無限ループになるように記述しています。ただし、int型変数「i」が「i > 3」の条件を満たすようになれば、break文によってfor文から抜け出すことができて、処理が修了しています。

for文を無限ループで使用する場合は、このように他の条件でループを抜けられるようにしておきましょう。なお、break文については後ほど詳しく解説しています。

forループを制御する方法

「break」句や「continue」句を使って、処理をスキップする制御方法についてみていきましょう。

breakでループを抜ける方法

「break」句に達すると、ループ内のそれ以降の処理は行われずにループ外の次の処理に移行します。サンプルコードで確認していきましょう。

#include <stdio.h>
 
int main(void) {
    for(int i = 0; i < 5; i++) {
        if(i + 1 > 3) {
            break;
        }
        printf("%d回目の処理です\n", i + 1);
    }
    printf("処理が終了しました\n");
    
    return 0;
}

実行結果:

1回目の処理です
2回目の処理です
3回目の処理です
処理が終了しました

このサンプルコードのfor文の継続条件式では、int型の変数「i」の値が5未満であれば処理を繰り返します。しかし実行結果を確認すると途中で処理が行われなくなり、ループ外の処理に移行しています。

これは変数「i」の値がif文の「i + 1 > 3」の条件を満たし「break」句に達したためです。それ以降のループ内の処理は実行されていません。

continueで処理をスキップする方法

「continue」句に到達するとそれ以降のループ処理は行われず、ループの最初の処理から再び実行されます。サンプルコードで確認していきましょう。

#include <stdio.h>
 
int main(void) {
    for(int i = 0; i < 5; i++) {
        if(i + 1 < 3) {
            continue;
        }
        printf("%d回目の処理です\n", i + 1);
    }
    printf("処理が終了しました\n");
    
    return 0;
}

実行結果:

3回目の処理です
4回目の処理です
5回目の処理です
処理が終了しました

このサンプルコードでは、int型の変数「i」の値がif文の「i + 1< 3」という条件を満たす間はfor文のループ内の「continue」句以降の処理は行わずに、for文の最初の処理に戻っています。

変数「i」の値が「i < 3」という条件を満たさなくなると、for文のループ内のそれ以降の処理も実行されています。for文の「i < 5」という継続条件式を満たさなくなると、ループ外の処理を実行しています。

for文とwhile文の書き換え方法

for文と同じように繰り返し処理を行うwhile文があります。for文は繰り返し回数が決められているときに使うことが多いですが、for文をwhile文で書き換えることも可能です。さきほどのサンプルコードをwhile文で書き換えたコードを確認していきましょう。

#include <stdio.h>
 
int main(void) {
    int i = 0;
    while(i < 3) {
        printf("%d回目の処理です\n", i + 1);
        i++;
    }
    printf("処理が終了しました\n");
    
    return 0;
}

実行結果:

1回目の処理です
2回目の処理です
3回目の処理です
処理が終了しました

このサンプルコードでは、繰り返し回数を数えるint型の変数「i」を定義しています。繰り返しごとに回数を1ずつ増やすために「i++」(インクリメント)と記述しています。

for文を使って配列を操作する

for文は配列の要素にアクセスする場合に、よく使われることがあります。for文で配列を操作する方法については、こちらで詳しく解説していますので参考にしてください。

まとめ

ここでは、for文の使い方について説明しました。for文は決められた回数を繰り返し実行すると、ブロック内の処理を終了しブロック外の処理に移行します。

条件によって必要のない処理を省きたい場合は「break」句や「continue」句と組み合わせて使用します。「break」句や「continue」句とあわせても使いこなすことができるように、この記事を何度も参考にして下さいね!

この記事を書いた人

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

目次