C++ while/do-whileループ完全ガイド:繰り返し処理をマスターする
C++ while/do-while ループ – 繰り返し処理をマスターする
C++の while ループと do-while ループを、明確な実例、フローチャート、ベストプラクティスのヒントとともに解説します。
ループは効率的なプログラミングの基石です:コード行を複製せずに、コードブロックを繰り返し実行できます。範囲をイテレートする場合も、ユーザー入力を待つ場合も、適切なループタイプを選ぶことは、読みやすく保守しやすいコードにとって不可欠です。
C++には3つの主要なループ構造があります:
forループ – 反復回数が既知の場合に最適whileループ – 条件が真の間実行do…whileループ – 条件判定前に少なくとも1回実行を保証
for ループは前回のチュートリアルで扱ったため、この記事では while と do…while ループに焦点を当て、構文、実行フロー、よくある落とし穴、実用的なユースケースを詳述します。
C++ while ループ
while ループの構文はシンプルです:
while (condition) {
// ループの本体
}
ループは各反復の前に condition を評価します:
conditionがtrueならループ本体を実行- 本体完了後に条件を再評価
conditionがfalseになるまで繰り返し、その後ループを抜ける
C++の関係演算子と論理演算子について詳しくは C++ 関係演算子と論理演算子 ガイドを参照してください。
while ループのフローチャート

実例 1: 1から5までの数字を表示
// 1から5までの数字を出力するC++プログラム
#include <iostream>
using namespace std;
int main() {
int i = 1;
// 1から5までのwhileループ
while (i <= 5) {
cout << i << " ";
++i;
}
return 0;
}
出力
1 2 3 4 5
プログラム実行のステップバイステップ分析:
| 反復 | 変数 | i <= 5 | アクション |
|---|---|---|---|
| 1回目 | i = 1 | true | 1 出力、i は 2 に |
| 2回目 | i = 2 | true | 2 出力、i は 3 に |
| 3回目 | i = 3 | true | 3 出力、i は 4 に |
| 4回目 | i = 4 | true | 4 出力、i は 5 に |
| 5回目 | i = 5 | true | 5 出力、i は 6 に |
| 6回目 | i = 6 | false | ループ終了 |
実例 2: 正の数のみの合計
// 正の数の合計を求めるプログラム
// ユーザーが負の数を入力したらループ終了
// 入力された負の数は合計に加算されない
#include <iostream>
using namespace std;
int main() {
int number;
int sum = 0;
// ユーザーから入力を取得
cout << "Enter a number: ";
cin >> number;
while (number >= 0) {
// すべての正の数を加算
sum += number;
// 数が正なら再度入力を促す
cout << "Enter a number: ";
cin >> number;
}
// 合計を表示
cout << "\nThe sum is " << sum << endl;
return 0;
}
出力
Enter a number: 6 Enter a number: 12 Enter a number: 7 Enter a number: 0 Enter a number: -2 The sum is 25
この例では、プログラムがユーザーに数値を繰り返し求めます。入力された数が非負なら sum に加算されます。負の入力でループが終了し、最終的な合計が表示されます。
C++ do…while ループ
do…while ループは、条件を評価する前に本体を少なくとも1回実行する点で while と異なります。ループ本体が終了条件のチェック前に実行されなければならない場合に有用です。
構文は:
do {
// ループの本体
} while (condition);
実行フロー:
- 本体を実行
- 条件を評価
trueなら本体を繰り返すfalseになるまで継続
do…while ループのフローチャート

実例 3: 1から5までの数字を表示
// 1から5までの数字を出力するC++プログラム
#include <iostream>
using namespace std;
int main() {
int i = 1;
// 1から5までのdo...whileループ
do {
cout << i << " ";
++i;
} while (i <= 5);
return 0;
}
出力
1 2 3 4 5
実行ステップ:
| 反復 | 変数 | i <= 5 | アクション |
|---|---|---|---|
| 初期 | i = 1 | 未チェック | 1 出力、i は 2 に |
| 1回目 | i = 2 | true | 2 出力、i は 3 に |
| 2回目 | i = 3 | true | 3 出力、i は 4 に |
| 3回目 | i = 4 | true | 4 出力、i は 5 に |
| 4回目 | i = 5 | true | 5 出力、i は 6 に |
| 5回目 | i = 6 | false | ループ終了 |
実例 4: 正の数のみの合計
// 正の数の合計を求めるプログラム
// ユーザーが負の数を入力したらループ終了
// 入力された負の数は合計に加算されない
#include <iostream>
using namespace std;
int main() {
int number = 0;
int sum = 0;
do {
sum += number;
// ユーザーから入力を取得
cout << "Enter a number: ";
cin >> number;
} while (number >= 0);
// 合計を表示
cout << "\nThe sum is " << sum << endl;
return 0;
}
出力 1
Enter a number: 6 Enter a number: 12 Enter a number: 7 Enter a number: 0 Enter a number: -2 The sum is 25
出力 2
Enter a number: -6 The sum is 0.
最初の入力が負の場合、ループは1回実行され即座に終了し、sum は変更されません。
無限ループ
ループの条件が決して false にならない場合、無限ループが発生します。これは意図的(永遠に動くサーバーなど)にも、偶発的(ロジックエラー)にも起こり得ます。
// 無限 while ループ
while (true) {
// ループの本体
}
同様に do…while でも無限ループ可能:
int count = 1;
do {
// ループの本体
} while (count == 1);
このようなループは、プログラムが終了するかシステムのメモリが尽きるまでリソースを消費し続けます。
for ループ vs while ループ
for ループは反復回数が事前に分かっている場合に最適です:
// 5回反復
for (int i = 1; i <= 5; ++i) {
// ループの本体
}
一方、while と do…while ループは、反復回数がユーザー入力や複雑な条件の結果など、実行時データに依存する場合に適しています。
さらにC++ループ例を探索:
C言語
- C# 条件分岐をマスターする:if、if-else、if-else if、ネストした if 文
- C++クラスとオブジェクト完全ガイド:オブジェクト指向プログラミングの実践
- C++メモリ管理の極意:newとdeleteのエキスパート活用法
- C++ public/protected/private継承の違いを徹底解説
- C++フレンド関数とフレンドクラス:アクセス制御のマスター
- C++ do-while文:構文、実践例、ネストしたループ
- while文 vs do-while文:実践例で明確に比較
- C++日付と時刻の完全ガイド:ctimeライブラリの活用
- C++オーバーロード完全マスター:関数と演算子のオーバーロード
- C++ファイルI/O完全マスター:fstreamによる読み書き
- Javaで回文数を判定する:while文とfor文を使ったアルゴリズム