C#のwhile文をbreakで抜ける方法|無限ループ対策と使い方を初心者向けに解説
はじめに
C#で繰り返し処理を書くときによく使うのがwhile文です。while文は、条件が成り立っている間、同じ処理を何度も実行できます。
ただし、条件の書き方を間違えたり、終了するきっかけを用意していなかったりすると、処理が終わらない無限ループになることがあります。そこで役立つのがbreakです。
breakを使うと、while文の途中でループを強制的に終了できます。この記事では、C#のwhile文をbreakで抜ける方法、無限ループを防ぐ考え方、continueやreturnとの違い、初心者がつまずきやすいポイントまでわかりやすく解説します。
1. C#のwhile文とbreakの基本
1-1. while文とは何か
while文とは、指定した条件がtrueの間、同じ処理を繰り返す構文です。
たとえば、数値を1ずつ増やしながら表示したい場合に使えます。
C#int count = 1;
while (count <= 5)
{
Console.WriteLine(count);
count++;
}
このコードでは、count <= 5がtrueの間、Console.WriteLine(count);が実行されます。
実行結果は次のようになります。
C#1
2
3
4
5
countが6になると、count <= 5がfalseになるため、while文は終了します。
1-2. breakとは何か
breakとは、ループ処理を途中で終了するための命令です。
while文の中でbreakが実行されると、その時点でループを抜け、while文の次の処理へ進みます。
C#int count = 1;
while (count <= 10)
{
if (count == 4)
{
break;
}
Console.WriteLine(count);
count++;
}
Console.WriteLine("ループ終了");
この場合、countが4になった時点でbreakが実行されるため、4以降は表示されません。
C#1
2
3
ループ終了
1-3. while文でbreakを使う場面
while文でbreakを使う場面は、主に次のようなケースです。
一定の条件を満たしたらループを終了したい場合、ユーザーが特定の文字を入力したら処理を終えたい場合、データが見つかった時点で検索をやめたい場合、エラーが発生したら繰り返し処理を中断したい場合などです。
特に、while (true)のように条件式を常にtrueにする書き方では、breakによる終了条件がとても重要になります。
1-4. while文とbreakの基本構文
while文とbreakを組み合わせる基本構文は次のとおりです。
C#while (条件式)
{
if (終了条件)
{
break;
}
繰り返したい処理;
}
ポイントは、breakを単独で使うのではなく、通常はif文と組み合わせて「どの条件になったら抜けるのか」を明確にすることです。
たとえば、次のコードではnumberが5になったらループを終了します。
C#int number = 1;
while (number <= 10)
{
if (number == 5)
{
break;
}
Console.WriteLine(number);
number++;
}
このように、breakは「条件を満たしたらループを途中で終わらせる」ために使います。
2. C#のwhile文をbreakで抜ける方法
2-1. 条件を満たしたらbreakでループを終了する
while文の中で特定の条件を判定し、その条件を満たしたときにbreakを実行すると、ループを終了できます。
C#int number = 1;
while (number <= 10)
{
Console.WriteLine(number);
if (number == 5)
{
break;
}
number++;
}
このコードでは、numberが5になった時点でbreakが実行されます。
実行結果は次のようになります。
C#1
2
3
4
5
本来であればnumber <= 10の間は繰り返されますが、breakによって途中で終了しています。
2-2. 入力値を判定してbreakする
ユーザー入力を受け取りながら処理を続ける場合にも、breakはよく使われます。
たとえば、ユーザーがexitと入力したら終了するプログラムは次のように書けます。
C#while (true)
{
Console.WriteLine("文字を入力してください。終了するには exit と入力します。");
string input = Console.ReadLine();
if (input == "exit")
{
break;
}
Console.WriteLine("入力された文字: " + input);
}
Console.WriteLine("プログラムを終了しました。");
while (true)は条件式が常にtrueなので、そのままでは永遠に繰り返されます。しかし、input == "exit"になったときにbreakが実行されるため、ループを終了できます。
2-3. カウント回数に応じてbreakする
繰り返し回数を数えながら、一定回数に達したらbreakで終了することもできます。
C#int count = 0;
while (true)
{
count++;
Console.WriteLine(count + "回目の処理です。");
if (count >= 3)
{
break;
}
}
Console.WriteLine("3回処理したので終了します。");
実行結果は次のようになります。
C#1回目の処理です。
2回目の処理です。
3回目の処理です。
3回処理したので終了します。
このように、while (true)を使う場合でも、カウント用の変数とbreakを組み合わせることで安全に終了できます。
2-4. 条件式がtrueでもbreakで抜けられる理由
while文は、基本的には条件式がtrueの間だけ繰り返されます。
しかし、breakは条件式の結果に関係なく、実行された時点でループを終了します。
C#int number = 1;
while (true)
{
Console.WriteLine(number);
if (number == 3)
{
break;
}
number++;
}
このコードでは、while (true)なので条件式は常にtrueです。それでも、number == 3になったときにbreakが実行されるため、ループは終了します。
つまり、breakはwhile文の条件式よりも強制的にループを抜ける命令だと考えるとわかりやすいです。
3. while文で無限ループを防ぐbreakの使い方
3-1. 無限ループが発生する原因
無限ループとは、ループが終了せず、同じ処理がずっと繰り返される状態です。
たとえば、次のコードは無限ループになります。
C#int count = 1;
while (count <= 5)
{
Console.WriteLine(count);
}
このコードでは、countの値が更新されていません。そのため、count <= 5がずっとtrueのままになり、ループが終わりません。
無限ループが発生する主な原因は、条件式がいつまでもtrueになること、ループ内で変数を更新していないこと、breakに到達しない書き方になっていることです。
3-2. while(true)とbreakを組み合わせる書き方
while (true)は、あえて無限ループを作る書き方です。ただし、必ずbreakによる終了条件を用意します。
C#while (true)
{
Console.WriteLine("メニューを選んでください。");
Console.WriteLine("1: 実行");
Console.WriteLine("2: 終了");
string input = Console.ReadLine();
if (input == "2")
{
break;
}
Console.WriteLine("処理を実行しました。");
}
メニュー画面や入力待ち処理では、ユーザーが終了を選ぶまで繰り返したいことがあります。このような場合、while (true)とbreakの組み合わせはよく使われます。
3-3. 終了条件を必ず用意する
while文を書くときは、「いつ終わるのか」を必ず考えることが大切です。
特にwhile (true)を使う場合は、次のように終了条件を明確にします。
C#if (終了する条件)
{
break;
}
終了条件がないと、プログラムが止まらなくなります。
また、終了条件があっても、その条件に到達できない場合は意味がありません。たとえば、入力値を判定して終了する場合は、ユーザーがどの文字を入力すれば終了できるのかを画面に表示しておくと親切です。
3-4. breakが実行されない場合の注意点
breakを書いていても、実行されなければループは終了しません。
次のコードを見てください。
C#int count = 1;
while (true)
{
if (count == 5)
{
break;
}
Console.WriteLine(count);
}
このコードでは、countの値が増えていません。そのため、countはずっと1のままで、count == 5にはなりません。結果として、breakは実行されず、無限ループになります。
正しくは、ループ内でcountを更新します。
C#int count = 1;
while (true)
{
if (count == 5)
{
break;
}
Console.WriteLine(count);
count++;
}
breakを書くことだけで安心せず、その条件に本当に到達できるかを確認しましょう。
4. breakを使ったwhile文のサンプルコード
4-1. 数値が一定値になったらbreakする例
数値が一定値になったらbreakで終了する基本的な例です。
C#int number = 1;
while (number <= 10)
{
Console.WriteLine("現在の値: " + number);
if (number == 5)
{
Console.WriteLine("5になったのでループを終了します。");
break;
}
number++;
}
このコードでは、numberが5になった時点でループを終了します。while文の条件では10まで繰り返せるようになっていますが、breakによって途中で抜けています。
4-2. ユーザー入力で終了する例
ユーザーが特定の文字を入力したら終了する例です。
C#while (true)
{
Console.WriteLine("名前を入力してください。終了する場合は q を入力します。");
string name = Console.ReadLine();
if (name == "q")
{
break;
}
Console.WriteLine("こんにちは、" + name + "さん");
}
Console.WriteLine("入力を終了しました。");
このコードでは、qが入力されるまで処理を繰り返します。入力を続ける処理では、while (true)とbreakの組み合わせが便利です。
4-3. 条件に一致するデータを見つけたらbreakする例
配列の中から目的のデータを探し、見つかった時点でループを終了する例です。
C#string[] names = { "Tanaka", "Suzuki", "Sato", "Yamada" };
int index = 0;
string target = "Sato";
while (index < names.Length)
{
if (names[index] == target)
{
Console.WriteLine(target + " が見つかりました。");
break;
}
index++;
}
このコードでは、Satoが見つかった時点でbreakを実行します。目的のデータが見つかった後もループを続ける必要はないため、breakで処理を終えることで無駄な繰り返しを減らせます。
4-4. エラー発生時にbreakする例
繰り返し処理の中でエラーが発生した場合に、breakで処理を中断することもあります。
C#int count = 1;
while (count <= 5)
{
Console.WriteLine(count + "回目の処理を開始します。");
bool hasError = count == 3;
if (hasError)
{
Console.WriteLine("エラーが発生したため、処理を中断します。");
break;
}
Console.WriteLine("処理が完了しました。");
count++;
}
この例では、3回目の処理でエラーが発生したことにして、breakでループを終了しています。
実際のプログラムでは、ファイルの読み込みに失敗した場合、通信に失敗した場合、想定外のデータが見つかった場合などに、ループを中断することがあります。
5. while文のbreakとcontinueの違い
5-1. breakはループを終了する
breakは、ループそのものを終了します。
C#int count = 1;
while (count <= 5)
{
if (count == 3)
{
break;
}
Console.WriteLine(count);
count++;
}
このコードでは、countが3になった時点でループを終了します。
実行結果は次のようになります。
C#1
2
breakが実行されると、以降の繰り返しは行われません。
5-2. continueは次の繰り返しへ進む
continueは、現在の繰り返しだけをスキップして、次の繰り返しへ進みます。
C#int count = 0;
while (count < 5)
{
count++;
if (count == 3)
{
continue;
}
Console.WriteLine(count);
}
実行結果は次のようになります。
C#1
2
4
5
countが3のときだけConsole.WriteLine(count);が実行されず、次の繰り返しへ進んでいます。
5-3. breakとcontinueの使い分け
breakはループを完全に終了したいときに使います。
一方、continueはループ自体は続けたいけれど、今回の処理だけ飛ばしたいときに使います。
たとえば、目的のデータが見つかったら検索を終了したい場合はbreakを使います。特定の値だけ処理対象から外したい場合はcontinueを使います。
C#int number = 0;
while (number < 5)
{
number++;
if (number == 2)
{
continue;
}
if (number == 4)
{
break;
}
Console.WriteLine(number);
}
このコードでは、2はスキップされ、4になった時点でループが終了します。
5-4. 初心者が混同しやすいポイント
初心者が混同しやすいのは、breakもcontinueも「途中で処理を止める」ように見える点です。
しかし、実際の動きは大きく違います。
breakはループ全体を終了します。continueは現在の1回分の処理だけを終了して、次の繰り返しに進みます。
また、continueを使う場合は、変数の更新位置に注意が必要です。
C#int count = 1;
while (count <= 5)
{
if (count == 3)
{
continue;
}
Console.WriteLine(count);
count++;
}
このコードは、countが3になったときにcontinueが実行され、count++に到達しません。そのため、countはずっと3のままになり、無限ループになります。
正しくは、continueの前に変数を更新するなどの工夫が必要です。
6. while文のbreakとreturnの違い
6-1. breakはループだけを抜ける
breakは、while文などのループだけを抜けます。
C#static void Sample()
{
int count = 1;
while (count <= 5)
{
if (count == 3)
{
break;
}
Console.WriteLine(count);
count++;
}
Console.WriteLine("while文の後の処理です。");
}
このコードでは、breakでwhile文を抜けたあと、Console.WriteLine("while文の後の処理です。");が実行されます。
つまり、breakはメソッド全体を終了するわけではありません。
6-2. returnはメソッドを終了する
returnは、メソッドそのものを終了します。
C#static void Sample()
{
int count = 1;
while (count <= 5)
{
if (count == 3)
{
return;
}
Console.WriteLine(count);
count++;
}
Console.WriteLine("while文の後の処理です。");
}
このコードでは、countが3になった時点でreturnが実行されます。そのため、while文の後にある処理は実行されません。
6-3. breakとreturnの使い分け
while文だけを終了して、その後の処理を続けたい場合はbreakを使います。
メソッド全体の処理を終了したい場合はreturnを使います。
C#static void CheckNumber()
{
int number = 1;
while (number <= 10)
{
if (number == 5)
{
break;
}
number++;
}
Console.WriteLine("チェックが完了しました。");
}
この場合は、breakでループを抜けたあとに完了メッセージを表示できます。
一方、異常な状態が見つかり、これ以上メソッド内の処理を続けたくない場合はreturnが向いています。
6-4. メソッド内のwhile文で注意すること
メソッド内でwhile文を使う場合は、breakとreturnの違いを意識しましょう。
breakを使った場合、ループの後ろにある処理は実行されます。returnを使った場合、メソッドを抜けるため、後ろの処理は実行されません。
この違いを理解していないと、「ループを抜けたあとに処理が動いてしまった」「逆に、実行されると思っていた処理が動かなかった」というミスにつながります。
7. ネストしたwhile文でbreakを使う場合
7-1. breakで抜けられるのは一番内側のループ
while文の中にさらにwhile文がある状態を、ネストしたwhile文といいます。
ネストしたループでbreakを使う場合、抜けられるのは一番内側のループだけです。
C#int i = 1;
while (i <= 3)
{
int j = 1;
while (j <= 3)
{
if (j == 2)
{
break;
}
Console.WriteLine("i=" + i + ", j=" + j);
j++;
}
i++;
}
このコードでは、breakで抜けるのは内側のwhile (j <= 3)だけです。外側のwhile (i <= 3)は続きます。
7-2. 外側のwhile文まで抜けたい場合の考え方
C#のbreakは、基本的に一番近いループだけを抜けます。そのため、内側のループから外側のループまで一気に抜けたい場合は、別の工夫が必要です。
代表的な方法として、フラグ変数を使う方法があります。
フラグ変数とは、状態を表すための変数です。たとえば、shouldStopというbool型の変数を用意し、外側のループも終了すべきかどうかを判断します。
7-3. フラグ変数を使って複数のループを抜ける方法
次のコードでは、内側のループで条件を満たしたら、外側のループも終了します。
C#bool shouldStop = false;
int i = 1;
while (i <= 3)
{
int j = 1;
while (j <= 3)
{
if (i == 2 && j == 2)
{
shouldStop = true;
break;
}
Console.WriteLine("i=" + i + ", j=" + j);
j++;
}
if (shouldStop)
{
break;
}
i++;
}
内側のwhile文でshouldStop = true;にしてからbreakします。その後、外側のwhile文でもshouldStopを確認し、breakで終了します。
このようにすれば、ネストしたwhile文でも複数のループを抜けることができます。
7-4. ネストが深いwhile文を避ける設計
ネストが深いwhile文は、コードが読みにくくなりやすいです。
breakやフラグ変数が増えると、どのタイミングでどのループを抜けるのかがわかりにくくなります。
そのため、ネストが深くなりそうな場合は、処理をメソッドに分ける、条件を整理する、ループの構造を見直すなどの工夫が大切です。
読みやすいコードを書くためには、単にbreakで抜けるだけでなく、「そもそも複雑なループにしない」ことも重要です。
8. while文でbreakを使うときの注意点
8-1. break条件を明確にする
breakを使うときは、どの条件でループを終了するのかを明確にしましょう。
C#if (input == "exit")
{
break;
}
このように、終了条件がはっきりしているコードは読みやすくなります。
逆に、複数の場所にbreakが散らばっていると、どこでループが終わるのかわかりにくくなります。必要以上にbreakを増やさないことも大切です。
8-2. ループ内の変数更新を忘れない
while文では、条件に関係する変数をループ内で更新する必要があります。
C#int count = 1;
while (count <= 5)
{
Console.WriteLine(count);
count++;
}
count++を忘れると、countの値が変わらず、無限ループになる可能性があります。
breakを使っている場合でも、break条件に到達するための変数更新を忘れてはいけません。
8-3. 読みにくいコードにならないようにする
breakは便利ですが、使いすぎるとコードの流れが追いにくくなります。
たとえば、1つのwhile文の中にbreakが何度も出てくると、どの条件で終了するのかを確認するのが大変になります。
C#while (true)
{
if (条件A)
{
break;
}
if (条件B)
{
break;
}
if (条件C)
{
break;
}
}
このようなコードが必要になる場合は、条件をまとめられないか、メソッドに分けられないかを考えるとよいでしょう。
8-4. breakに頼りすぎない書き方を意識する
breakを使わなくても、while文の条件式で終了条件を表現できる場合があります。
C#int count = 1;
while (count <= 5)
{
Console.WriteLine(count);
count++;
}
このように、条件式だけで自然に終了できる場合は、無理にbreakを使う必要はありません。
一方で、ユーザー入力やエラー判定など、ループの途中でしか終了判断ができない場合はbreakが便利です。
大切なのは、breakを使うこと自体ではなく、読みやすく安全なコードにすることです。
9. while文とbreakでよくあるエラー・つまずき
9-1. breakを書いているのにループが止まらない
breakを書いているのにループが止まらない場合は、breakの条件が満たされていない可能性があります。
C#int count = 1;
while (true)
{
if (count == 10)
{
break;
}
Console.WriteLine(count);
}
このコードでは、countが更新されていないため、count == 10になりません。その結果、breakが実行されません。
修正するには、count++を追加します。
C#int count = 1;
while (true)
{
if (count == 10)
{
break;
}
Console.WriteLine(count);
count++;
}
breakが動かないと感じたら、まず「その条件に本当に到達しているか」を確認しましょう。
9-2. breakの位置が原因で処理が実行されない
breakを書く位置によっては、本来実行したい処理が実行されないことがあります。
C#int count = 1;
while (count <= 5)
{
if (count == 3)
{
break;
}
Console.WriteLine(count);
count++;
}
このコードでは、countが3になった時点でbreakするため、3は表示されません。
3を表示してから終了したい場合は、breakの位置を後ろに移動します。
C#int count = 1;
while (count <= 5)
{
Console.WriteLine(count);
if (count == 3)
{
break;
}
count++;
}
breakは実行された瞬間にループを抜けるため、位置がとても重要です。
9-3. 条件式の書き方を間違えて無限ループになる
while文の条件式を間違えると、無限ループになることがあります。
C#int count = 1;
while (count >= 1)
{
Console.WriteLine(count);
count++;
}
このコードでは、countが増え続けるため、count >= 1はずっとtrueです。そのため、ループが終わりません。
本来、5まで繰り返したいのであれば、次のように書きます。
C#int count = 1;
while (count <= 5)
{
Console.WriteLine(count);
count++;
}
while文では、条件式がどのタイミングでfalseになるのかを考えることが大切です。
9-4. コンパイルエラーになるbreakの使い方
breakは、どこにでも書けるわけではありません。
breakは、while文、for文、foreach文、do文、switch文などの中で使います。ループやswitchの外に書くと、コンパイルエラーになります。
C#static void Sample()
{
break;
}
このようなコードは正しくありません。breakは抜ける対象がない場所では使えないからです。
正しくは、次のようにwhile文の中で使います。
C#static void Sample()
{
int count = 1;
while (count <= 5)
{
if (count == 3)
{
break;
}
Console.WriteLine(count);
count++;
}
}
breakを使うときは、「どのループを抜けるのか」を意識しましょう。
まとめ
C#のwhile文は、条件がtrueの間、処理を繰り返すための構文です。繰り返し処理を途中で終了したい場合は、breakを使います。
breakは、条件式がまだtrueであっても、実行された時点でwhile文を抜けることができます。そのため、while (true)のような無限ループ形式でも、終了条件とbreakを正しく用意すれば安全に使えます。
ただし、breakを書くだけでは不十分です。breakの条件に到達できるように変数を更新すること、breakの位置を間違えないこと、終了条件を明確にすることが重要です。
また、breakはループを終了しますが、continueは次の繰り返しへ進み、returnはメソッド全体を終了します。それぞれの違いを理解して使い分けることで、C#のwhile文をより正しく書けるようになります。
初心者のうちは、まず「while文はいつ終わるのか」「breakはどの条件で実行されるのか」を意識してコードを書くことが大切です。終了条件が明確なwhile文を書けるようになると、無限ループを防ぎながら、安全で読みやすいプログラムを作れるようになります。

