breakでループ処理を中止しよう

ここでは break を使ってみましょう。
前回はcontinueによって、現在のループ処理を途中で止めて次回のループ処理をおこなうことについて学びました。
break は continue とは異なり、ループ処理そのものを中止します。
状況に応じて continue と break を使い分けられるようになりましょう。

動かしてみよう

では、まずはサンプルコードを動かしてみましょう。
for文の時に、1〜入力値までの総和を求めるサンプルを使いましたが、ここではそのサンプルの出力変数outputの型を int → unsigned char に変更したものを用意しました。
まだbreak文はいれてありません。
まず入力欄に 22 をいれて、実行ボタンを押してみてください。

1+2+・・・+22 = 253 が計算されたと思います。
では次に入力欄に 23 をいれて、実行ボタンを押してみてください。

期待する結果としては、253 + 23 = 276 ですが、20 が出力されてしまいました。
これは変数output の型が unsigned char で定義してあるため、255より大きい値を表現できずにオーバーフローをおこしたためです。(オーバーフローについては変数と型でも述べています。)

このような場合には、変数outputの型を大きくすることで解決したり、このプログラムでは255までしか扱えないことを通知したり、などの対応をとる必要があります。
今回はbreak文を使い、後者の対応をおこなってみましょう。
下記のサンプルコードで 22 と 23 を入力した場合の挙動の違いをみてください。

23 をいれた場合に注意をうながす文章が表示されました。
これにより、使用者のプログラムの誤使用を防止することが期待できますね。

では、解説に進みましょう。

解説

break の基本構文は下記です。
for文やwhile文内の任意の箇所に break; と書くことで、機能を実現できます。

/* for文 */
for(初期化; 継続条件; カウンタ更新 )
{
  処理1;    /* なくてもよい */
  if( 条件式 ) break;
  処理2;    /* なくてもよい */
}

/* while文 */
while( 継続条件 )
{
  処理1;    /* なくてもよい */
  if( 条件式 ) break;
  処理2;    /* なくてもよい */
}

break を単体で記述すると、必ず1回目のループで処理を抜けてしまいますので、だいたいはif文とセットで用います。

サンプルコードでは

for(count = 1; count <= input; count++ )
{
    if( (output + count) > 255 ) break;
    output += count;
}

という実装をおこないました。
output += count; の実行前に、if文を用いて (output + count) が 255 を超えないかの事前チェックをし、超えそうな場合にはbreakによってfor文を中止させています。
これによって、処理のオーバーフローを未然に防ぎ、プログラムの誤動作を回避させています。

まとめ

まとめです。

  • for文やwhile文の中に break; と書くことで、今のループを中止できます。
  • if文と組み合わせて使うのが一般的です。

以上です。
ではまた。

タイトルとURLをコピーしました