while文って使ってますか?
ある条件がtrueであれば処理を繰り返したい場合に使用します。
またC言語では「do-while」構文で使ったり、「break」句や「continue」句を使って必要のない処理を省略するなど処理を制御することもできます。
この記事では、while文について
- while文とは
- while文の使い方について
- do-while文の使い方について
- breakやcontinueを使ってループを制御する方法
- 条件式が複数の場合
- while(1)で無限ループを作成
など基本的な内容から、応用的な使い方についても解説していきます。
今回はwhile文について、使い方をわかりやすく解説します!
while文とは
while文とは冒頭でも述べましたが、ある条件がtrueであれば処理を繰り返したい場合に使用します。
しかし条件が変わらなければ処理を続けることになります。
条件が変わった時点で処理を終了してループから抜けなければ、必要のない処理を続けることになりムダが発生してしまいます。
そんな場合には「break」句や「continue」句を使って、不要な処理をスキップするなどの処理の制御を行います。
これらの使い方について詳しく説明していきます。
while文の使い方
while文は以下のように記述します。
while(条件式) { 処理 }
サンプルコードで確認していきましょう。
#include <stdio.h> int main(void) { int i = 0; while(i < 3) { printf("%d回目の処理です\n", i + 1); i++; } printf("処理が終了しました\n"); return 0; }
実行結果:
1回目の処理です 2回目の処理です 3回目の処理です 処理が終了しました
このサンプルコードではint型の変数「i」が3未満であれば処理を繰り返します。
1回ごとの処理で変数「i」に1ずつ加算する処理を行っていますので、3回処理を繰り返すと条件を満たさなくなり、while文の繰り返しループを抜けて全ての処理が終了します。
ちなみに、while文は条件式が初めからfalseの場合にはブロック内の処理は1度も行われず、ブロック外の次の処理に移行します。
do-while文の使い方
次にdo-while文の使い方をみていきましょう。
do-while文は以下のように記述します。
do { 処理 } while (条件式);
while文とdo-while文の違いは、条件式が初めからfalseの場合にwhile文ではブロック内の処理が1度も行われないのに対して、do-while文ではブロック内の処理が1度は行われる点です。
do-while文の使い方をサンプルコードで確認していきましょう。
#include <stdio.h> int main(void) { int i = 0; do { printf("%d回目の処理です\n", i + 1); i++; } while(i < 3); printf("処理が終了しました\n"); return 0; }
実行結果:
1回目の処理です 2回目の処理です 3回目の処理です 処理が終了しました
do-while文の場合は処理を先に記述し、繰り返しの条件を処理の後に記述します。
ループを制御する方法
「break」句や「continue」句を使って、処理をスキップする制御方法についてみていきましょう。
breakでループを抜ける方法
「break」句に到達すると、ループ内のそれ以降の処理は行わずにループ外の次の処理に移ります。
サンプルコードで確認していきましょう。
#include <stdio.h> int main(void) { int i = 0; while(i < 5) { if(i + 1 > 3) { break; } printf("%d回目の処理です\n", i + 1); i++; } printf("処理が終了しました\n"); return 0; }
実行結果:
1回目の処理です 2回目の処理です 3回目の処理です 処理が終了しました
このサンプルコードのwhile文の条件では、int型の変数「i」が5未満であれば処理を繰り返します。
しかし実行結果を確認すると途中で処理が行われなくなり、ループ外の処理に移行しています。
これは変数「i」が「i + 1 > 3」の条件を満たし「break」句に達したためで、それ以降のループ内の処理は実行されていません。
continueで処理をスキップする方法
「continue」句に到達するとそれ以降のループの処理は行われず、ループの最初の処理から再び実行されます。
サンプルコードで確認していきましょう。
#include <stdio.h> int main(void) { int i = 0; while(i < 5) { i++; if(i < 3) { continue; } printf("%d回目の処理です\n", i); } printf("処理が終了しました\n"); return 0; }
実行結果:
3回目の処理です 4回目の処理です 5回目の処理です 処理が終了しました
このサンプルコードでint型の変数「i」の「i < 3」という条件を満たす間はループ内の「continue」句以降の処理は行われず、ループ内の最初の処理に戻っています。
変数「i」の「i < 3」という条件を満たさなくなると、ループ内のそれ以降の処理も実行されています。
while文の「i < 5」という条件を満たさなくなると、ループ外の処理を実行し最後まで処理が実行されています。
条件式が複数の場合
条件式が2つ以上の複数ある場合は、「OR」や「AND」といった論理演算子を使います。
論理演算子には次のようなモノがあります。
論理演算子の種類 | 書き方例 | 説明 |
---|---|---|
OR | A || B | AもしくはBのどちらか一方が「true」であれば、「true」の値を返す。 A、Bどちらとも「false」の場合のみ、「false」の値を返す。 |
AND | A && B | A、Bどちらとも「true」の場合のみ、「true」の値を返す。 AもしくはBのどちらか一方が「false」であれば、「false」の値を返す。 |
NOT | !A | Aが「true」の場合「false」の値を返す。 「false」の場合「true」の値を返す。 |
それではサンプルコードで確認しましょう。
#include <stdio.h> int main(void) { int i = 0; while(i >= 0 && i < 3) { printf("%d回目の処理です\n", i + 1); i++; } printf("処理が終了しました\n"); return 0; }
実行結果:
1回目の処理です 2回目の処理です 3回目の処理です 処理が終了しました
条件式については、こちらで詳しく解説していますので、ぜひ参考にしてください。
while(1)で無限ループを作成
while文で無限ループを回したい場合があります。無限ループとは半永久的に繰り返されるループのことです。
そんな場合は以下のように記述します。
while (1) { //条件式がtrueのときに繰り返す処理 }
while文は条件式がtrueの場合、処理が繰り返されます。
C言語ではtrueをint型の1で表しますので、条件式を1と記述すれば無限ループを作成することができます。
サンプルコードで確認しましょう。
ただし、無限にループが回ることになるので、あらかじめ処理を止める方法を確認してから実行しましょう。
#include <stdio.h> int main(void) { while(1) { } printf("処理が終了しました\n"); return 0; }
break文で無限ループから抜ける方法
さきほどのサンプルコードでは、while文が無限にループを回すことになってしまいました。
break文を使って無限ループから抜けられるようにしておきましょう。
#include <stdio.h> int main(void) { int i = 0; while(1) { i++; if(i > 3) { break; } printf("%d回目の処理です\n", i); } printf("処理が終了しました\n"); return 0; }
実行結果:
1回目の処理です 2回目の処理です 3回目の処理です 処理が終了しました
このサンプルコードでは、while文が無限ループになるように記述しています。
ただし、int型変数「i」が「i > 3」の条件を満たすようになれば、break文によってwhile文から抜け出すことができて、処理が終了しています。
while文を無限ループで使用する場合は、このように他の条件でループを抜けられるようにしておきましょう。
まとめ
ここでは、while文の使い方について説明しました。
while文を使う場合は条件を満たしたあとに必要のない処理を行わないように、「break」句や「continue」句と組み合わせて適切に制御する必要があります。
「break」句や「continue」句とあわせて使いこなすことができるように、この記事を何度も参考にして下さいね!