記事には広告を含む場合があります。

C言語入門講座

【C言語】break・continueの意味(for・while・if文中の使い方)

おゆ

組み込み系プログラマとして5年働いていた元エンジニアです。得意言語はC言語とC++。本サイトでは学生および新人組み込み系プログラマに向けてプログラミング知識をわかりやすく解説しています。

break・continueはともに繰り返し処理中で使われる便利な機能です。

記事の内容

  • break・continueとは何か
  • breakは多重ループをどこまで抜けるのか
  • if文内(ループなし)でbreakを使うことはできない

breakとは繰り返し処理から抜け出す命令

breakはfor文とwhile文中でif文とともに使われます。

switch文中で使う方法は以下の記事で解説しています。

switch文の書き方

【C言語】変数のスコープとは?static・ローカル・グローバル変数の違い

C言語やC++を勉強しているとたまに出てくる変数のスコープって何?難しそうだからわかりやすく解説してほしい。 ローカル変数とグローバル変数とstatic変数って何が違うの? こんな疑問にお答えします。 ...

続きを見る

if文とfor文の組み合わせ

breakを使うとforループを途中で抜けられます

breakが実行されるとfor文内でbreakより後に書いてある処理は実行されず、即座にforループから抜けます。

例:

#include <stdio.h>
void main()
{
    for(int i=0; i<10; ++i)
    {
        if(i>3) break;
        printf("i=%d\n",i);
    }
    printf("End\n");
}

実行結果

i=0
i=1
i=2
i=3
End

if文とwhile文の組み合わせ

breakを使えばwhileループも途中で中断して抜けることができます。

例:

#include <stdio.h>
void main()
{
    int i=0;
    while(1)
    {
        i=i+1;
        if(i>3) break;
        printf("i=%d\n",i);
    }
    printf("End\n");
}

実行結果

i=1
i=2
i=3
End

do while文でも同じように使えます。

continueとは次のループを実行する命令

continueはfor、while文中でifと一緒に使います。

if文とfor文の組み合わせ

continueを使うとcontinue以降の処理はスキップして次のループに入ります

下の例ではiが0より大きくなるとcontinueが適用され、その下のprintf文は実行されずに次のループに行きます。

例:

#include <stdio.h>
void main()
{
    for(int i=0; i<3; ++i)
    {
        printf("Loop Start\n");
        if(i>0) continue;
        printf("i=%d\n",i);
    }
    printf("End\n");
}

実行結果

Loop Start
i=0
Loop Start
Loop Start
End

if文とwhile文の組み合わせ

while文でもcontinue以降の処理はスキップして次のループに入ります

例:

#include <stdio.h>
void main()
{
    int i=0;
    while(i<3)
    {
        printf("Loop Start\n");
        i=i+1;
        if(i>1) continue; //i=i+1;と場所を入れ替えると無限ループ
        printf("i=%d\n",i);
    }
    printf("End\n");
}

実行結果

Loop Start
i=0
Loop Start
Loop Start
End

ただし、ループを抜けるとこはできないのでwhile(1)で使う時は無限ループに注意してください。

iのインクリメントより先にcontinueを置いた場合も無限ループになりがちです。

continueはdo while文でも同じように使えます。

breakは多重ループをどこまで抜けるのか

breakを使うとループを抜けるのはわかったけど、ループが何重にもなっていた場合どこまで抜けるの?
おゆ
breakを使うとループを1回だけ抜けます。

以下のように2重ループ内でbreakを使うと内側のfor文だけを抜け、外側のループは最後まで実行されます。

例:

#include <stdio.h>
void main()
{
    for(int j=0; j<2; ++j)
    {
        for(int i=0; i<10; ++i)
        {
            if(i==0) break;
            printf("Loop1");
        }
        printf("Loop2\n");
        //この位置にbreakを入れると外側のループを抜ける
    }
}

実行結果

Loop2
Loop2

今回はbreakをif文の中に入れましたが、if(i==0)を消して「break;」のみにしても結果は同じです。

逆に「if(i==0){if(j<2) break;}」のようにif文を多重にしても同じ結果になります。

つまりbreakはif文の書き方に関わらず、一番内側のループの外に出よという命令なのです。

外側のループも抜けたければコメントに書いた位置にもbreakを入れます。

if文内(ループなし)でbreakを使うことはできない

例えば以下のようにif文内であってもループまたはswitch文の外でbreakを使うとコンパイル時にエラーが出ます。

例:

#include <stdio.h>
void main()
{
    int i=0;
    if(i>3) break;
}

エラー文
エラー

breakは繰り返し処理内でしか使えません。

まとめ:break・continueはif・for・while文中で使える便利機能

break・continueは繰り返し処理を都合のいい位置で終わらせたいときに使える便利な機能です。

breakはループを1つ抜ける、continueは即座に次のループに移るという命令になります。

C言語で行き詰まったら…

C言語・C++がわからない時に質問できるサイト・サービス5選

C言語を独学で勉強しているけど内容がイマイチわからない。もはや何がわからないのかもわからない。 C++のエラーが解決できない。ググってもわからない。わかる人に解説してほしい。 こんなお悩みにお答えしま ...

続きを見る

ブログランキング参加中。クリックしてもらえると励みになります。

ブログランキング・にほんブログ村へ

-C言語入門講座