[C言語] while文のループをbreak文で抜ける方法
C言語において、while
文は条件が真である限り繰り返し処理を行うループ構造です。
ループを途中で終了したい場合、break
文を使用します。
break
文は、while
ループ内で実行されると、ループを即座に終了し、ループの後のコードに制御を移します。
これにより、特定の条件が満たされたときにループを抜けることが可能です。
例えば、無限ループを防ぐためや、特定の値に達したときに処理を終了する際に有効です。
- while文内でのbreak文の基本的な使用方法
- ユーザー入力や特定条件によるループの終了方法
- ネストされたループや複数条件でのbreak文の応用例
- break文とcontinue文の併用によるループ制御
- 状態遷移を用いたループの管理方法
while文とbreak文の組み合わせ
C言語におけるwhile
文とbreak
文の組み合わせは、ループ処理を柔軟に制御するための重要な手法です。
while
文は条件が真である限り繰り返し処理を行いますが、break
文を使用することで、特定の条件を満たしたときにループを強制的に終了させることができます。
以下では、具体的な使用例を通じてその活用方法を解説します。
while文内でのbreak文の使用例
while
文内でbreak
文を使用することで、ループを途中で終了させることができます。
以下に基本的な使用例を示します。
#include <stdio.h>
int main() {
int i = 0;
// ループ開始
while (i < 10) {
printf("iの値: %d\n", i);
if (i == 5) {
// iが5になったらループを終了
break;
}
i++;
}
return 0;
}
iの値: 0
iの値: 1
iの値: 2
iの値: 3
iの値: 4
iの値: 5
この例では、i
が5になった時点でbreak
文が実行され、while
ループが終了します。
条件に応じたループの終了
break
文は、特定の条件を満たしたときにループを終了させるために使用されます。
以下の例では、ユーザーからの入力に応じてループを終了します。
#include <stdio.h>
int main() {
int number;
// ユーザーが0を入力するまでループ
while (1) {
printf("数字を入力してください (0で終了): ");
scanf("%d", &number);
if (number == 0) {
// 0が入力されたらループを終了
break;
}
printf("入力された数字: %d\n", number);
}
return 0;
}
数字を入力してください (0で終了): 5
入力された数字: 5
数字を入力してください (0で終了): 3
入力された数字: 3
数字を入力してください (0で終了): 0
このプログラムでは、ユーザーが0を入力するとbreak
文が実行され、ループが終了します。
無限ループからの脱出
while
文をwhile(1)
のように記述すると無限ループを作成できますが、break
文を使用することで特定の条件でループを抜け出すことができます。
#include <stdio.h>
int main() {
int count = 0;
// 無限ループ
while (1) {
printf("カウント: %d\n", count);
count++;
if (count >= 10) {
// カウントが10以上になったらループを終了
break;
}
}
return 0;
}
カウント: 0
カウント: 1
カウント: 2
カウント: 3
カウント: 4
カウント: 5
カウント: 6
カウント: 7
カウント: 8
カウント: 9
この例では、count
が10以上になるとbreak
文が実行され、無限ループから脱出します。
無限ループを制御する際にbreak
文は非常に有用です。
実践例
ここでは、while
文とbreak
文を組み合わせた実践的な例を紹介します。
これらの例は、実際のプログラムでよく使われるシナリオを想定しています。
ユーザー入力によるループ終了
ユーザーの入力に基づいてループを終了する方法は、インタラクティブなプログラムでよく使用されます。
以下の例では、ユーザーが特定の文字列を入力することでループを終了します。
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
// "exit"が入力されるまでループ
while (1) {
printf("文字列を入力してください (終了するには 'exit' と入力): ");
scanf("%s", input);
if (strcmp(input, "exit") == 0) {
// "exit"が入力されたらループを終了
break;
}
printf("入力された文字列: %s\n", input);
}
return 0;
}
文字列を入力してください (終了するには 'exit' と入力): hello
入力された文字列: hello
文字列を入力してください (終了するには 'exit' と入力): world
入力された文字列: world
文字列を入力してください (終了するには 'exit' と入力): exit
このプログラムでは、ユーザーが”exit”と入力するとbreak
文が実行され、ループが終了します。
特定条件でのデータ処理停止
データ処理を行う際に、特定の条件を満たした場合に処理を停止することが求められることがあります。
以下の例では、配列内の特定の値を見つけたときにループを終了します。
#include <stdio.h>
int main() {
int data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int target = 7;
int i;
// 配列内のtargetを探す
for (i = 0; i < 10; i++) {
if (data[i] == target) {
printf("見つけた値: %d\n", data[i]);
// targetが見つかったらループを終了
break;
}
}
return 0;
}
見つけた値: 7
このプログラムでは、配列内でtarget
の値を見つけた時点でbreak
文が実行され、ループが終了します。
センチネル値によるループ制御
センチネル値は、データの終わりを示す特別な値で、ループを制御するために使用されます。
以下の例では、センチネル値として-1を使用してループを終了します。
#include <stdio.h>
int main() {
int number;
// センチネル値-1が入力されるまでループ
while (1) {
printf("数字を入力してください (-1で終了): ");
scanf("%d", &number);
if (number == -1) {
// -1が入力されたらループを終了
break;
}
printf("入力された数字: %d\n", number);
}
return 0;
}
数字を入力してください (-1で終了): 10
入力された数字: 10
数字を入力してください (-1で終了): 20
入力された数字: 20
数字を入力してください (-1で終了): -1
このプログラムでは、ユーザーが-1を入力するとbreak
文が実行され、ループが終了します。
センチネル値は、データの終端を示すために便利です。
応用例
while
文とbreak
文の組み合わせは、基本的なループ制御だけでなく、より複雑な状況にも対応できます。
ここでは、応用的な使用例を紹介します。
ネストされたループでのbreak文の使用
ネストされたループ内でbreak
文を使用する場合、break
文は最も内側のループのみを終了させます。
以下の例では、二重ループの内側のループを終了させる方法を示します。
#include <stdio.h>
int main() {
int i, j;
// 外側のループ
for (i = 0; i < 3; i++) {
// 内側のループ
for (j = 0; j < 3; j++) {
if (j == 1) {
// jが1のとき内側のループを終了
break;
}
printf("i: %d, j: %d\n", i, j);
}
}
return 0;
}
i: 0, j: 0
i: 1, j: 0
i: 2, j: 0
このプログラムでは、j
が1になると内側のループが終了し、外側のループが次の反復に進みます。
複数条件でのループ終了
複数の条件を組み合わせてループを終了させることも可能です。
以下の例では、2つの条件のいずれかが満たされたときにループを終了します。
#include <stdio.h>
int main() {
int count = 0;
int limit = 5;
// countが10以上またはlimitが0以下でループを終了
while (count < 10 && limit > 0) {
printf("カウント: %d, リミット: %d\n", count, limit);
count++;
limit--;
}
return 0;
}
カウント: 0, リミット: 5
カウント: 1, リミット: 4
カウント: 2, リミット: 3
カウント: 3, リミット: 2
カウント: 4, リミット: 1
このプログラムでは、count
が10以上になるか、limit
が0以下になるとループが終了します。
break文とcontinue文の併用
break
文とcontinue
文を併用することで、ループの制御をさらに細かく行うことができます。
continue
文はループの残りの処理をスキップし、次の反復に進みます。
#include <stdio.h>
int main() {
int i;
// 1から10までの数をループ
for (i = 1; i <= 10; i++) {
if (i % 2 == 0) {
// 偶数の場合は次の反復に進む
continue;
}
if (i > 7) {
// iが7を超えたらループを終了
break;
}
printf("奇数: %d\n", i);
}
return 0;
}
奇数: 1
奇数: 3
奇数: 5
奇数: 7
このプログラムでは、偶数のときはcontinue
文で次の反復に進み、i
が7を超えるとbreak
文でループを終了します。
状態遷移に基づくループ制御
状態遷移を用いてループを制御することも可能です。
以下の例では、状態変数を用いてループの終了を制御します。
#include <stdio.h>
typedef enum { START, PROCESS, END } State;
int main() {
State currentState = START;
int count = 0;
// 状態に基づくループ
while (currentState != END) {
switch (currentState) {
case START:
printf("開始状態\n");
currentState = PROCESS;
break;
case PROCESS:
printf("処理中: %d\n", count);
count++;
if (count >= 3) {
currentState = END;
}
break;
case END:
// ここには到達しない
break;
}
}
return 0;
}
開始状態
処理中: 0
処理中: 1
処理中: 2
このプログラムでは、状態変数currentState
を用いてループの進行を制御し、count
が3に達したときにEND
状態に遷移してループを終了します。
状態遷移を用いることで、複雑なロジックを整理しやすくなります。
よくある質問
まとめ
while
文とbreak
文の組み合わせは、C言語におけるループ制御の基本的かつ強力な手法です。
この記事では、基本的な使い方から応用例までを通じて、break
文の効果的な使用方法を学びました。
これを機に、実際のプログラムでwhile
文とbreak
文を活用し、より効率的なコードを書いてみてください。