C++プログラミングにおいて、ループ処理は非常に重要です。
その中でもwhile文は、特定の条件が満たされるまで繰り返し処理を行うための構文です。
本記事では、初心者向けにwhile文の基礎的な使い方から応用的な使い方まで詳しく解説します。
C++のwhile文とは
C++のwhile文は、指定した条件が真である限り、繰り返し処理を行うための制御構造です。
while文は、for文と同様に反復処理を行うために使用されますが、for文と異なり初期化式や増分式を省略することができます。
while文の基本的な構文は以下の通りです。
while (条件式) {
// 条件式が真である間実行される処理
}
例えば、1から10までの整数を順番に表示するプログラムをwhile文を使って書く場合、以下のようになります。
#include <iostream>
int main() {
int i = 1;
while (i <= 10) {
std::cout << i << std::endl;
i++;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
このプログラムでは、変数i
を初期値1で初期化し、i
が10以下である限り繰り返し処理を行います。
繰り返し処理では、現在のi
の値を表示してからi
に1加算します。
これによって、1から10までの整数が順番に表示されます。
以上がC++のwhile文の基本的な使い方です。次はwhile文内でbreakやcontinueなども使った応用的な使い方について解説していきます。
while文の注意点
while文を使用する際には注意点もあります。
- 条件式が常に真となって無限ループに陥らないよう注意する必要があります。
- 変数や配列要素等を更新しないままループさせてしまうと無限ループに陥ることもあります。
- 初めから一度も中括弧内の処理を実行しない可能性もあるため、必ず初期化や代入等で変数等を初期化する必要性もあります。
while文の応用例
while文は、繰り返し処理を行うためによく使われます。
ここでは、while文を使った繰り返し処理や入力の受け取り、条件の判定など、実際のプログラムでよく使われる応用例を紹介します。
while文を使った繰り返し処理
while文は、指定した条件が真である限り、繰り返し処理を行います。以下は、1から10までの数値を順番に表示するプログラムです。
#include <iostream>
int main() {
int i = 1;
while (i <= 10) {
std::cout << i << std::endl;
i++;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
このプログラムでは、変数i
に初期値として1が代入されています。その後、while文でi
が10以下である限り、std::cout
関数を使って変数i
の値を表示し、変数i
に1ずつ加算しています。
このようにすることで、1から10までの数値が順番に表示されます。
while文を使った入力の受け取り
while文は、ユーザーからの入力を受け取る場合にもよく使われます。以下は、0
が入力されるまでユーザーから数字を受け取って合計値を計算するプログラムです。
#include <iostream>
int main() {
int sum = 0;
int input;
while (true) {
std::cout << "数字を入力してください(0で終了): ";
std::cin >> input;
if (input == 0) {
break;
}
sum += input;
}
std::cout << "合計: " << sum << std::endl;
return 0;
}
42
このプログラムでは、変数sum
に初期値として0が代入されています。
その後、無限ループ内でユーザーから数字の入力を受け付けています。
もしユーザーが0
を入力した場合はループから抜け出して合計値を計算し、最後に合計値が入った変数sum
の値を表示しています。
while文を使った条件の判定
while文は条件式が真か偽かでループ処理自体も制御することが出来ます。以下は、5
以上10
未満のランダムな整数値(5以上9以下)だけ表示するプログラムです。
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
srand((unsigned int)time(NULL));
while (true) {
int num = rand() % 10 + 1; // 1~10 の乱数生成
if (num >= 5 && num < 10) { // 条件式
std::cout << num << std::endl;
break; // 条件式が成立したらループから抜け出す
}
}
return 0;
}
7
if
文内では、num
変数が「5以上かつ10未満」という条件式に当てはまるかどうか判断しています。
num
変数が条件式に当てはまらない場合は何もせず再度乱数生成します。
num
変数が条件式に当てはまった場合、std::cout
関数でその値(5以上9以下)だけ表示したあとループを抜けています。
これによって「5以上9以下」のランダムな整数値だけ表示することが出来ます。
while文の代替手段
while文以外にも、同じような繰り返し処理を行うための構文があります。ここでは、for文とdo-while文について説明します。
for文
for文は、あらかじめ繰り返し回数が決まっている場合に使用されます。以下は、for文の基本的な構文です。
for (初期化式; 条件式; 更新式) {
// 繰り返し処理
}
初期化式は、ループ変数を初期化するための式です。条件式は、ループ変数が条件を満たしているかどうかを判定するための式です。更新式は、ループ変数を更新するための式です。
例えば、「1から10までの整数を順番に表示する」という処理をfor文で書くと以下のようになります。
for (int i = 1; i <= 10; i++) {
cout << i << endl;
}
do-while文
do-while文は、最低でも一度は繰り返し処理を行いたい場合に使用されます。以下は、do-while文の基本的な構文です。
do {
// 繰り返し処理
} while (条件式);
条件式は、ループ変数が条件を満たしているかどうかを判定するための式です。
先ほどの例題「1から10までの整数を順番に表示する」をdo-while文で書くと以下のようになります。
int i = 1;
do {
cout << i << endl;
i++;
} while (i <= 10);
注意点として、do-while文では最初に繰り返し処理が実行されてから条件判定が行われるため、必ず一度以上繰り返しが実行されることが保証されます。
一度も実行されないケースを作る場合は、do-while文ではなくwhile文を使用します。