同じ処理の繰り返しが必要な場合に使用します。
for文の他にwhile文がありますので、ここではwhile文の使い方を説明します。
while文
while文の書き方は以下となります。
while (条件式)
実行する処理;
(条件式)
条件式が「真」ならば「実行する処理」を実行します。
サンプルを見てみましょう。
int i=0;
while (i<3){
printf("%d 回目です\n",i);
i++;
}
説明します。
(条件式)
i<3 の場合には、「実行する処理」である printf文とi++を実行します。
i=3 の場合には、printf文とi++は実行されません。
以下が実行結果です。
#include <stdio.h>
int main()
{
int i=0;
while (i<3) {
printf("%d 回目のループです\n", i);
i++;
}
}
実行結果
0回目のループです
1回目のループです
2回目のループです
次の例は複数の文を実行する例です。
#include <stdio.h>
int main()
{
int i=0;
while (i<3) {
printf("%d 回目のループです\n", i);
printf("i+1 は %d です\n", i+1);
i++;
}
}
実行結果
0 回目のループです
i+1 は 1 です
1 回目のループです
i+1 は 2 です
2 回目のループです
i+1 は 3 です
下のような書き方になります。
while (条件式){
実行する処理;
実行する処理;
実行する処理;
}
while文2重ループ
2重ループの使い方です。3重、4重も同様です。
#include <stdio.h>
int main()
{
int x=1, y=10;
while (x<=3) {
while (y<=30) {
printf("x=%d y=%d x+y=%d\n", x, y, x+y);
x+=1;
y+=10;
}
}
}
実行結果
x=1 y=10 x+y=11
x=2 y=20 x+y=22
x=3 y=30 x+y=33
while文無限ループ
無限ループの使い方は以下の書き方です。
while (1) {
実行する処理;
}
条件式に1と書いてありますが、数値だけでも式です。
そして、1は真を表しますので、これは常に真なので無限ループとなります。
このままではプログラムが永遠に終了しないため、次に説明するbreakによって終了させます。
break文
break文はwhile文の実行を中止します。
#include <stdio.h>
int main()
{
int i=0;
while (1) {
i++;
if (i>=3) {
printf("終了します\n");
break;
}
printf("while %d回目の処理\n", i);
}
printf("処理が終了しました\n");
}
実行結果
while 1回目の処理
while 2回目の処理
終了します
処理が終了しました
この使い方は、while文を実行する時点では終了条件が分からない場合です。
while文内で何らかの処理を行ったときに、終了条件が判明したらbreakで終了するということです。
上の例では、 i>=3 で break して、while文を抜け出ます。
「while 3回目の処理」が無いことに注意してください。
continue文
continue文は処理をスキップします。
次の例を見てください。
#include <stdio.h>
int main()
{
int i=0;
while (i<5) {
i++;
printf("i while文の下 i=%d です\n", i);
if (i<2) {
/* 処理が不要のためスキップ */
printf("continue文の前です\n");
continue;
}
printf("if文の下 i=%d です\n", i);
}
printf("処理が終了しました\n");
}
実行結果
i while文の下 i=1 です
continue文の前です
i while文の下 i=2 です
if文の下 i=2 です
i while文の下 i=3 です
if文の下 i=3 です
i while文の下 i=4 です
if文の下 i=4 です
i while文の下 i=5 です
if文の下 i=5 です
処理が終了しました
この使い方は、while文の中で処理したくない、処理をスキップしたいという場合に
continue文を使ってスキップします。
上記の例では、iが2未満のときには、
「printf("if文の下 i=%d です\n", i)」
の処理をしないということです。
continue文を実行すると、continue文の下方の文は処理をせずにwhile文のすぐ下の行に行きます。
実行結果の出力をみてください。
「if文の下 i=2 です」
i=1の場合はこのprintfが無いことに注意してください。
スキップされています。
次の例を見てください。
2重ループの場合です。
この場合 continue するとどこに行くのでしょう。
#include <stdio.h>
int main()
{
int i=0, k=0;
while (k<2) {
k++;
printf("k while文の下 k=%d です\n", k);
while (i<4) {
i++;
printf("i while文の下 i=%d です\n", i);
if (i<2) {
/* 処理が不要のためスキップ */
printf("continue文の前です\n");
continue;
}
printf("if文の下 i=%d です\n", i);
}
printf("処理が終了しました\n");
}
}
実行結果
k while文の下 k=1 です
i while文の下 i=1 です
continue文の前です
i while文の下 i=2 です
if文の下 i=2 です
i while文の下 i=3 です
if文の下 i=3 です
i while文の下 i=4 です
if文の下 i=4 です
処理が終了しました
k while文の下 k=2 です
処理が終了しました
continue を実行すると「i while文の下 i=2 です」に行きます。
2重ループの場合の continue は、自分の属している {} のwhile文に戻ります。
break も同様です。
do while文
do while文の書き方は以下となります。
do {
実行する処理;
} while (条件式);
(条件式)
条件式が「真」ならば「実行する処理」を実行します。
サンプルを見てみましょう。
int i=0;
do {
printf("%d 回目です\n", i); ←文1
i++; ←文2
} while (i<3);
説明します。
文1を実行します。
文2を実行します。
条件式(i<3)が「真」かどうか調べます。
真なら文1に戻ります。
偽ならwhileを終了して次の処理へ進みます。
以下が実行結果です。
#include <stdio.h>
int main()
{
int i=0;
do {
printf("%d 回目です\n", i);
i++;
} while (i<3);
printf("while終了です\n", i);
}
実行結果
0 回目です
1 回目です
2 回目です
while終了です
次の例は複数の文を実行する例です。
#include <stdio.h>
int main()
{
int i=0;
while (i<3) {
printf("%d 回目のループです\n", i);
printf("i+1 は %d です\n", i+1);
i++;
}
}
実行結果
0 回目のループです
i+1 は 1 です
1 回目のループです
i+1 は 2 です
2 回目のループです
i+1 は 3 です
while文と違うのは、判断を最初に行うか、判断を最後に行うかです。
continueやbreakの使い方もすべて同じです。
コメント