while文 ループ構文2
while文
C言語ではfor文のほかに、while文というループ文があります。
#include <stdio.h>
int main()
{
int i = 0;
while(i < 10)
{
printf("%d ", i);
i++;
}
getchar();
}
0 1 2 3 4 5 6 7 8 9
- while(条件式){ 文 }
- 条件式が真の間、文を繰り返し実行する
while文で使用するのは条件式ひとつだけです。
条件式が真の間、文が繰り返し実行されます。
while文はfor文に比べると簡潔にループを書くことができます。
ただ、サンプルコードのようにループカウンタを終了条件にする場合はfor文のほうが良いでしょう。
意図的な無限ループ
while文は意図的に無限ループをさせるコードでよく用いられます。
#include <stdio.h>
int main()
{
int count = 0;
while (1)
{
if (count < 10)
{
printf("%d ", count);
count++;
continue;
}
break;
}
getchar();
}
0 1 2 3 4 5 6 7 8 9
while文の条件判定に「1」が指定されています。
C言語の条件判定では0は偽、それ以外は真となります。
(if文#数値の条件判定を参照)
条件式に1
を指定すると常に真となるので、このwhile文は無限ループとなります。
本当に無限ループにしてしまうとプログラムが終了できないので、ループ文を抜けるための処理を必ず記述します。
continue文
サンプルコードでは、変数count
の値が10未満の間は変数count
の値を画面に表示し、値をひとつ増やしています。
次にcontinue文を実行します。
continue文が実行されると、その行以降の処理はスキップされ、ループ文の先頭に処理を戻します。
ループにより変数count
が10以上になると、if文は実行されません。
その次のbreak文により、ループ処理を抜けます。
break文はswitch文の時にも説明しましたが、現在のswitch文やループ文を抜けます。
do while文
do while文はwhile文とよく似たループ文です。
- do{ 文 }while(条件式)
- 文を実行し、条件式が真の間、文を繰り返し実行する
do while文は、ループ終了の条件判定が最後に行われます。
条件式に関係なく、ループブロック内の処理は必ず一度は実行される点がwhile文とは異なります。
do while文は、何らかの処理が成功するまで繰り返す時によく用いられます。
以下はwhile文を使用して、「a」を含む文字が入力されるまでループを続けるサンプルコードです。
#include <stdio.h>
int main()
{
int moji = 0;
while (moji != 'a') {
moji = getchar();
}
}
このコードは動作はしますが、最初のループ時の条件判定のmoji != 'a'
は偽になることは確実で、無駄な判定となっています。
これをdo while文で書き直すと以下のようになります。
#include <stdio.h>
int main()
{
int moji = 0;
do {
moji = getchar();
} while (moji != 'a');
}
「処理」→「成否判定」の順なので、while文よりもdo while文を使用するほうが自然なコードとなります。