ここでは 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文と組み合わせて使うのが一般的です。
以上です。
ではまた。