新しい命令を使って、前回のプログラムを書き換えます。
前回のプログラムは、同じ命令を2度書く必要がありましたが、新しい命令を使うと1度ですむようになります。
新しい命令とは「break」というキーワードです。
「break」は以前「switch文」の所で出てきました。
「switch文」での「break」は「switch文から抜ける」、というものでしたが、繰り返しと組み合わせることで「繰り返しから抜ける」という使い方が出来るようになります。
少し例を書いてみましょう。
<sample program 041-01>
#include <stdio.h> int main(void) { while (1) { printf("Hello\n"); break; } return 0; } |
<実行結果>
Hello 続行するには何かキーを押してください・・・
while (1 ) は無限ループですから、延々と「Hello」という文字が表示されるはずですが、breakがあるために途中で繰り返しから抜けてしまい、1度しか表示されなくなっています。
ただ、このような使い方だと無限ループの意味が無くなってしまいますので、通常はif文と組み合わせて使います。
<sample program 041-02>
#include <stdio.h> int main(void) { int counter; counter = 0; while (1) { printf("counter = %d\n", counter); counter++; if (counter > 9) { break; } } return 0; } |
<実行結果>
counter = 0 counter = 1 counter = 2 counter = 3 counter = 4 counter = 5 counter = 6 counter = 7 counter = 8 counter = 9 続行するには何かキーを押してください・・・
0から9までの数値を表示するプログラムです。
whileの条件を書かず、無限ループで作成しています。
counterを増加させていき、9を超えたらbreakして繰り返しを抜けます。
このようにif文と組み合わせて使えば、繰り返しの好きな箇所から抜けることが出来ます。
前回のプログラムで説明した、
得点入力 チェック 合計
という順番でプログラムを組むときも、チェックの箇所でbreakを使えば途中で抜けらることが出来ます。
では、前回のプログラムを書き換えてみます。
<sample program 041-03>
#include <stdio.h> int main(void) { int sum; int input; sum = 0; while (1) { do { printf("点数を入力してください:"); scanf("%d", &input); } while (input < 0 || input > 100 && input != 999); if (input == 999) { break; } sum += input; } printf("得点合計は%d点です。\n", sum); return 0; } |
<実行結果>
点数を入力してください:100 点数を入力してください:0 点数を入力してください:50 点数を入力してください:999 得点合計は150点です。 続行するには何かキーを押してください・・・
入力した後、チェックを行い、999であれば無限ループを抜けています。
同じ題材(得点合計)で何種類かのプログラムを書きましたが、1つの問題に対する解法(プログラム)はいくつかあります。
10人いれば10通りのプログラムが出来上がる可能性があるのです。
ですから毎回<解答例>と書いています。
<解答例>を見た後で、他の方法も無いのかどうか、皆さんも考えてみてください。
最後にbreakを使う上での注意点を1つ書いておきます。
次のプログラムを実行してみてください。
<sample program 041-04>
#include <stdio.h> int main(void) { int data = 10; while (1) { switch (data) { case 10: printf("data = %d\n", data); break; } } return 0; } |
data = 10 という文字が延々と表示されます。
whileとswitchを併用する際に、switch文の中に書いてあるbreakは、あくまでもswitch文を抜けるためのbreakですからwhile文までは抜け出しません。
whileは無限ループになっていますから、ずっと抜け出せないままになります。
逆にswitch文の中にwhile文を書き、while文の中でbreakを実行してもswitch文は抜け出しません。
<sample program 041-05>
#include <stdio.h> int main(void) { int data = 10; switch (data) { case 10: while (1) { printf("case 10\n"); break; } case 11: printf("case 11\n"); break; } return 0; } |
<実行結果>
case 10 case 11 続行するには何かキーを押してください・・・
case 10: の中にwhile文があります。
無限ループですが、"case 10"と表示するとすぐbreakします。
ただし、このbreakは、while文を抜けるだけですから、switch文は抜けません。
抜けないため、case 11: の内容も実行されています。