C言語入門:break文(2)

break文はループから抜けるための構文ですが、breakにより抜けるループは一番内側の一つだけです。 ここでは例を示しながら「一番内側のループから抜ける」ということの説明をしたいと思います。 ここでは、サンプルコードの結果は書いていません。 実際に手元にサンプルコードをコピー ⇒ コンパイル ⇒ 実行してみてください。

サンプル1

前述した例は単純にfor文が一つあって、その中にbreak文がありました。 では、for文の中にfor文があって、その中にbreak文があった場合にはどのようになるのでしょうか?

答えから書いてしまうと、break文は一番内側のループに対してしか適応されません。 そのためfor文の中にfor文があって、その中にbreak文があるとbreak文が実行されたときには内部のfor文だけを抜けることになります。

では、実際にfor文の中にfor文を入れた例を以下に示します。 どのような挙動を示すか試してみてください。


#include <stdio.h>

int
main()
{
 int i, k;

 for (i = 0; i < 5; i++) {
   printf("i = %d\n", i);

   for (k = 0; k < 5; k++) {
     printf("k = %d\n", k);

     if (k == i) {
       printf("break\n");
       break;
     }
   }

   printf("after for(k) : i = %d\n", i);
 }

 return 0;
}

上記例では、外側のfor文は「for (i = 0; i < 5; i++)」とあるので5回繰り返しを行おうとします。 変数iを使ったfor文の中には変数kを利用したfor文「for (k = 0; k < 5; k++)」があります。 上記例では、変数iと変数kの値が同一のときにbreak文が実行されます。 break文は、break文からみて一番内側のループだけを抜けるので、外側のfor文に戻ります。 言い方を変えると、break文は変数kを使ったfor文からのみ抜け出します。

サンプル2

次の例では、for文の中のwhile文でbreak文を使った例です。


#include <stdio.h>

int
main()
{
  int i, k;

  for (i = 0; i < 5; i++) {

    printf("in for i=%d\n", i);

    k = 0;
    while (k < 5) {
       printf("in while k=%d\n", k);

       if (k == i) {
         printf("break\n");
         break;
       }
       k++;
    }

    printf ("after while\n");
  }

  return 0;
}

上記例はサンプル1と全く同じ挙動を示します。


次:コメントの書き方

- C言語入門 記事一覧

おまけ

IPv6基礎検定

YouTubeチャンネルやってます!