★基本制御文(while14)★


新しい命令を使って、前回のプログラムを書き換えます。

前回のプログラムは、同じ命令を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: の内容も実行されています。


次へ

戻る

目次へ