while文制御


もうひとつのループ制御文

C言語ではfor以外にもループステートメントが存在します
それがwhile制御文です。for文に比べて簡素なので無限ループなどにはこちらが使われます

基本的にはwhileでなければ解決できないというループ制御は存在しないでしょう
for文だけでもプログラムは作れます、が、やはりそのプログラムに適したループ制御を使うべきです
whileは真である間、指定ステートメントを繰り返すステートメントです

while (条件式) statement;

このwhileもファイル操作などの高度なプログラムになると多用されます
ただし、whileにはforのようなカウンターがないのでそれはプログラマがステートメントで指定する必要があります
たとえば次のプログラムを見てください
#include <stdio.h>

int main()
{
        while (1) printf("繰り返してます…\r");

        return 0;
}
この場合、whileに与えられている式は1、つまり真(True)です
ステートメントで強制的に抜け出すような命令はありません、つまり無限ループとなっています
注) 無限ループなのでプログラムを終了させられません。[Ctrl + C] などで強制的にアプリケーションを終了させてください

ループから抜け出すには、ループ内で強制的に抜け出すか
もしくはループ内で、ループ条件になっている値を変更してwhileに偽を渡すようにすることです
#include <stdio.h>

int main()
{
        int count = 0;

        while (1) {
                printf("/");
                if (count == 25) printf("\n\t猫耳愛!\n");
                if (count == 50) break;

                count++;
        }
        printf("\nループを抜けました、プログラムを終了します");
        return 0;
}
switchでやったbreakステートメントを使って抜け出しています
breakは現在のループから離脱するステートメントでしたね

次は、もっとも一般的な方法でループを抜けてみましょう
これは、for同様にwhileの式で上限を決めてループの中でインクリメントを使います
#include <stdio.h>

int main()
{
        int count = 0;

        while (count <= 50) {
                printf("/");
                if (count == 25) printf("\n\t猫耳愛!\n");

                count++;
        }
        printf("\nループを抜けました、プログラムを終了します");
        return 0;
}
通常は後者のようにwhileの条件式が偽になるようにループ内で制御します
前者のようにbreakを使って抜け出すのは特別な理由がある場合にif制御文などを通して使われます


do 〜 whileループ

whileに似たループで doステートメント があります
whileステートメントと特別な違いはありませんが、ひとつだけ大きく異なる部分があります
それはステートメントを実行したあとで式を評価するということです

whileやforステートメントでは、式を評価してからループを行ないました
そのため実行の時点で評価が偽であれば、ステートメントを一度も実行しませんでした

たとえ評価がどのような形であれ、最低でも一度は実行してほしい場合にdoは威力を発揮します
doステートメントは実行ステートメントが先にあり、その後に繰り返すかどうかを判定します

do ステートメント while (条件式);

ただし、doステートメントの場合は一般的に単体のステートメントを繰り返しに指定しません
可読性などを考慮して一行でもコードブロックを意図的に使用します
#include <stdio.h>

int main()
{
        int count = 1;
        int max;

        printf("繰り返す回数を指定してください\n");
        scanf("%d",&max);

        do {
                printf("%d回目のループです\r" , count);
                count++;
        } while (count <= max);

        printf("\nプログラムを終了します");
        return 0;
}
doを用いれば、たとえ0を入力されても必ず1度はステートメントが実行されます
プログラムの用途によって使い分けてください


while (expression) statement

statementをexprが真であるあいだ繰り返します

expression 評価する式を指定します

statement exprが真である間、くり返しすステートメントを指定します

do statement while (expression);

statementを実行したあとに条件式を評価します

statement exprが真である間、くり返すステートメントを指定します

expression 評価する条件式を記述してください



前のページへ戻る次のページへ