C#のdo while文とは?基本構文・whileとの違い・無限ループを防ぐ使い方をサンプルコードで解説
はじめに
C#で同じ処理を繰り返したいときに使う構文のひとつが、do while文です。do while文は、条件を満たしている間だけ処理を繰り返すループ処理ですが、通常のwhile文とは大きな違いがあります。
その違いは、条件判定を行う前に、必ず1回は処理を実行するという点です。
たとえば、ユーザーにメニューを表示して選択してもらう処理や、正しい入力があるまで再入力を求める処理では、最初の1回は必ず画面表示や入力受付を行いたいケースがあります。このような場面でdo while文は便利です。
この記事では、C#のdo while文の基本構文、while文との違い、無限ループが発生する原因と防ぎ方、実践的なサンプルコードまで初心者にもわかりやすく解説します。
1. C#のdo while文とは?
1-1. do while文の基本的な役割
C#のdo while文は、指定した条件がtrueである間、同じ処理を繰り返すための構文です。
繰り返し処理は「ループ」とも呼ばれます。C#には、主に次のような繰り返し文があります。
C#for文
while文
do while文
foreach文
この中でdo while文は、処理を先に実行し、その後で条件を判定するという特徴を持っています。
基本的には、次のような場面で使います。
C#do
{
// 繰り返したい処理
}
while (条件式);
条件式がtrueであれば、再びdoブロック内の処理が実行されます。条件式がfalseになると、ループを終了します。
1-2. 「最低1回は処理を実行する」繰り返し文であること
do while文の最大の特徴は、条件式が最初からfalseであっても、処理が最低1回は実行されることです。
通常のwhile文では、最初に条件式を判定します。そのため、条件が最初からfalseの場合、ループ内の処理は1回も実行されません。
一方、do while文では、先にdoブロック内の処理を実行し、その後でwhileの条件式を判定します。
C#int count = 10;
do
{
Console.WriteLine("この処理は1回実行されます");
}
while (count < 5);
この例では、count < 5は最初からfalseです。しかし、do while文では条件判定より前に処理が実行されるため、Console.WriteLineは1回実行されます。
この性質を理解しておくことが、do while文を正しく使ううえで重要です。
1-3. do while文が使われる代表的な場面
do while文は、最初の1回は必ず処理を実行したい場面に向いています。
代表的な使用例は次のとおりです。
C#メニューを表示して、ユーザーの選択を受け取る
正しい入力があるまで再入力させる
ゲームの処理を一定条件まで繰り返す
確認メッセージを表示して、条件に応じて再実行する
たとえば、メニュー処理では、ユーザーが終了を選ぶまでメニューを何度も表示することがあります。
C#int menu;
do
{
Console.WriteLine("1: 開始");
Console.WriteLine("2: 設定");
Console.WriteLine("0: 終了");
menu = int.Parse(Console.ReadLine());
}
while (menu != 0);
このように、最初に必ずメニューを表示したい処理では、do while文が自然に使えます。
2. C#のdo while文の基本構文
2-1. do while文の書き方
C#のdo while文は、次のように書きます。
C#do
{
// 繰り返し実行する処理
}
while (条件式);
doの後に波かっこ{ }を書き、その中に繰り返したい処理を記述します。その後にwhileを書き、丸かっこ( )の中に条件式を指定します。
条件式には、結果がtrueまたはfalseになる式を指定します。
C#int i = 1;
do
{
Console.WriteLine(i);
i++;
}
while (i <= 5);
このコードでは、iが5以下の間、処理を繰り返します。実行結果は次のようになります。
C#1
2
3
4
5
2-2. 条件式の書き方と評価タイミング
do while文の条件式は、ループ処理が1回実行された後に評価されます。
C#do
{
処理
}
while (条件式);
流れとしては、次の順番になります。
C#1. doブロック内の処理を実行する
2. whileの条件式を判定する
3. 条件式がtrueなら、もう一度doブロックを実行する
4. 条件式がfalseなら、ループを終了する
たとえば、次のコードを見てみましょう。
C#int number = 1;
do
{
Console.WriteLine(number);
number++;
}
while (number <= 3);
この場合、処理の流れは次のようになります。
C#number = 1 → 表示 → numberを2にする → 2 <= 3 はtrue
number = 2 → 表示 → numberを3にする → 3 <= 3 はtrue
number = 3 → 表示 → numberを4にする → 4 <= 3 はfalse
その結果、1、2、3が表示されてループが終了します。
2-3. セミコロンを忘れてはいけない理由
C#のdo while文では、最後のwhile (条件式)の後にセミコロン;が必要です。
C#do
{
Console.WriteLine("Hello");
}
while (true);
最後のセミコロンを忘れると、コンパイルエラーになります。
C#do
{
Console.WriteLine("Hello");
}
while (true) // セミコロンがないためエラー
do while文では、while (条件式);までがひとつの文として扱われます。そのため、最後のセミコロンが必要です。
通常のwhile文では、条件式の後にセミコロンを書かないことが多いため、初心者は混同しやすいポイントです。
通常のwhile文は次のように書きます。
C#while (条件式)
{
// 処理
}
一方、do while文は次のように最後にセミコロンを書きます。
C#do
{
// 処理
}
while (条件式);
この違いは必ず覚えておきましょう。
2-4. do while文の処理の流れ
do while文の処理の流れを、具体的なコードで確認します。
C#int count = 1;
do
{
Console.WriteLine($"{count}回目の処理です");
count++;
}
while (count <= 3);
Console.WriteLine("ループ終了");
実行結果は次のようになります。
C#1回目の処理です
2回目の処理です
3回目の処理です
ループ終了
このコードでは、最初にcountが1です。doブロック内でメッセージを表示し、count++で値を1増やします。
その後、while (count <= 3)が評価されます。条件がtrueであれば再びループし、falseになった時点でループを抜けます。
3. do while文の基本サンプルコード
3-1. カウントアップするシンプルな例
まずは、do while文を使って1から5まで表示するシンプルな例です。
C#int i = 1;
do
{
Console.WriteLine(i);
i++;
}
while (i <= 5);
実行結果は次のようになります。
C#1
2
3
4
5
このコードでは、iの値を表示した後、i++で1ずつ増やしています。
iが5以下の間はループを続け、iが6になると条件式i <= 5がfalseになるため、ループが終了します。
3-2. 条件がfalseでも1回は実行される例
次に、条件式が最初からfalseの場合でも、do while文が1回実行される例を見てみましょう。
C#int i = 10;
do
{
Console.WriteLine("do while文は1回実行されます");
}
while (i < 5);
実行結果は次のようになります。
C#do while文は1回実行されます
i < 5は最初からfalseです。しかし、do while文では条件判定より前に処理を実行するため、メッセージが1回表示されます。
この特徴は、while文との大きな違いです。
3-3. ユーザー入力を繰り返し受け取る例
do while文は、ユーザー入力を繰り返し受け取る処理にもよく使われます。
次の例では、ユーザーが0を入力するまで、入力を繰り返します。
C#int number;
do
{
Console.Write("数値を入力してください(0で終了): ");
number = int.Parse(Console.ReadLine());
Console.WriteLine($"入力された値: {number}");
}
while (number != 0);
Console.WriteLine("終了しました");
このコードでは、最初に必ず入力を受け付けます。その後、入力された値が0でなければ、もう一度入力を求めます。
ユーザーが0を入力すると、条件式number != 0がfalseになり、ループが終了します。
ただし、int.Parseは数値以外の文字列が入力されるとエラーになります。実際のアプリケーションでは、int.TryParseを使って入力チェックを行うほうが安全です。
4. do while文とwhile文の違い
4-1. while文の基本構文
C#のwhile文は、条件式がtrueの間、処理を繰り返す構文です。
基本構文は次のとおりです。
C#while (条件式)
{
// 繰り返し実行する処理
}
while文では、最初に条件式を判定します。条件式がtrueであれば処理を実行し、falseであれば処理を実行せずにループを終了します。
C#int i = 1;
while (i <= 5)
{
Console.WriteLine(i);
i++;
}
実行結果は次のようになります。
C#1
2
3
4
5
この例では、i <= 5がtrueの間、数値を表示しています。
4-2. do while文とwhile文の実行タイミングの違い
do while文とwhile文の違いは、条件判定のタイミングです。
while文は、処理の前に条件を判定します。
C#while (条件式)
{
// 条件がtrueの場合だけ実行される
}
do while文は、処理の後に条件を判定します。
C#do
{
// 最低1回は実行される
}
while (条件式);
つまり、while文は「条件を確認してから実行する」構文であり、do while文は「実行してから条件を確認する」構文です。
4-3. 条件判定が前か後かの違い
条件判定が前か後かによって、処理が実行される回数に違いが出ます。
次のwhile文を見てください。
C#int count = 10;
while (count < 5)
{
Console.WriteLine("while文の処理");
}
この場合、count < 5は最初からfalseです。そのため、while文の中の処理は1回も実行されません。
一方、同じ条件をdo while文で書くと、次のようになります。
C#int count = 10;
do
{
Console.WriteLine("do while文の処理");
}
while (count < 5);
この場合、条件式はfalseですが、処理は1回実行されます。
このように、do while文は「条件に関係なく、まず1回処理したい」ときに使います。
4-4. do while文とwhile文の使い分け
do while文とwhile文は、次のように使い分けるとわかりやすいです。
C#処理を1回も実行しない可能性がある場合 → while文
最低1回は必ず実行したい場合 → do while文
たとえば、データが存在する間だけ処理したい場合は、while文が向いています。
C#while (hasData)
{
// データがある場合だけ処理する
}
一方、ユーザーにメニューを表示して選択してもらう処理では、最初の1回は必ず表示したいため、do while文が向いています。
C#do
{
// メニューを表示する
}
while (選択が終了ではない);
無理にdo while文を使う必要はありません。条件判定を先に行いたいのか、後に行いたいのかを基準に選ぶことが大切です。
5. do while文で無限ループが発生する原因
5-1. 条件式が常にtrueになるケース
do while文では、条件式がtrueの間ループが続きます。そのため、条件式が常にtrueになると、ループが終わらなくなります。
C#do
{
Console.WriteLine("無限に繰り返されます");
}
while (true);
このコードでは、条件式が常にtrueなので、break文などで明示的に抜けない限り、処理は終了しません。
意図的に無限ループを作るケースもありますが、終了条件を用意しないとプログラムが止まらなくなる原因になります。
5-2. ループ内で変数を更新し忘れるケース
無限ループでよくある原因のひとつが、条件式に関係する変数をループ内で更新し忘れることです。
C#int count = 1;
do
{
Console.WriteLine(count);
}
while (count <= 5);
このコードでは、countの値がずっと1のままです。そのため、条件式count <= 5は常にtrueになり、無限ループになります。
正しくは、ループ内でcount++のように変数を更新する必要があります。
C#int count = 1;
do
{
Console.WriteLine(count);
count++;
}
while (count <= 5);
5-3. 入力値によって終了条件に到達しないケース
ユーザー入力を使ったdo while文でも、終了条件に到達しない場合は無限ループのような状態になります。
C#string input;
do
{
Console.Write("終了するには exit と入力してください: ");
input = Console.ReadLine();
}
while (input != "exit");
このコードでは、ユーザーがexitと入力するまでループが続きます。
ただし、ユーザーがEXITやExitと入力した場合は、条件を満たさないため終了しません。大文字小文字の違いや余分な空白が原因で、想定どおりに終了しないことがあります。
このような場合は、TrimやToLowerを使って入力値を整えると安全です。
C#input = Console.ReadLine().Trim().ToLower();
5-4. 無限ループになるサンプルコード
次のコードは、無限ループになる典型的な例です。
C#int i = 1;
do
{
Console.WriteLine(i);
}
while (i <= 10);
このコードでは、iの値が更新されていません。iはずっと1のままなので、i <= 10は常にtrueになります。
結果として、1がずっと表示され続けます。
また、次のようなコードも注意が必要です。
C#int number;
do
{
Console.Write("1以上の数値を入力してください: ");
number = int.Parse(Console.ReadLine());
}
while (number < 1);
このコード自体は間違いではありません。しかし、ユーザーが何度も0以下の数値を入力し続けると、ループは終了しません。
入力値に依存するループでは、終了条件や入力チェックを明確にすることが重要です。
6. do while文で無限ループを防ぐ使い方
6-1. ループ内で条件に関わる変数を必ず更新する
do while文で無限ループを防ぐためには、条件式に使っている変数をループ内で適切に更新することが重要です。
悪い例は次のとおりです。
C#int count = 1;
do
{
Console.WriteLine(count);
}
while (count <= 5);
このコードでは、countが更新されないため無限ループになります。
修正すると次のようになります。
C#int count = 1;
do
{
Console.WriteLine(count);
count++;
}
while (count <= 5);
count++によって値が増えるため、いずれcount <= 5がfalseになり、ループが終了します。
6-2. 終了条件を明確にする
do while文を使うときは、「どの条件になったらループを終了するのか」を明確にしておく必要があります。
たとえば、ユーザーが0を入力したら終了する処理であれば、条件式は次のように書けます。
C#while (number != 0);
この場合、numberが0以外の間は繰り返し、0になったら終了します。
終了条件があいまいだと、プログラムの動作がわかりにくくなります。
C#do
{
// 処理
}
while (まだ続ける条件);
このように、条件式を読んだだけで「いつ続くのか」「いつ終わるのか」がわかるように書くことが大切です。
6-3. break文でループを抜ける
break文を使うと、条件式の結果に関係なくループを抜けることができます。
C#int count = 1;
do
{
Console.WriteLine(count);
if (count == 3)
{
break;
}
count++;
}
while (count <= 10);
Console.WriteLine("ループを終了しました");
このコードでは、countが3になった時点でbreak文が実行され、ループを終了します。
break文は、特定の条件で強制的にループを抜けたい場合に便利です。
ただし、breakを多用すると処理の流れがわかりにくくなることがあります。終了条件だけで表現できる場合は、できるだけ条件式を使ってループを制御するほうが読みやすくなります。
6-4. 入力チェックを組み合わせる
ユーザー入力を扱う場合は、int.Parseではなくint.TryParseを使うと安全です。
int.Parseは、数値に変換できない文字列が入力されると例外が発生します。
C#int number = int.Parse(Console.ReadLine());
たとえば、ユーザーがabcと入力するとエラーになります。
一方、int.TryParseを使うと、変換に成功したかどうかを判定できます。
C#bool success = int.TryParse(Console.ReadLine(), out int number);
入力チェックを組み合わせたdo while文の例は次のとおりです。
C#int number;
bool isValid;
do
{
Console.Write("1から10までの数値を入力してください: ");
string input = Console.ReadLine();
isValid = int.TryParse(input, out number);
if (!isValid)
{
Console.WriteLine("数値を入力してください。");
}
else if (number < 1 || number > 10)
{
Console.WriteLine("1から10までの範囲で入力してください。");
isValid = false;
}
}
while (!isValid);
Console.WriteLine($"入力された数値は {number} です");
このコードでは、正しい数値が入力されるまで繰り返します。数値以外が入力された場合や、範囲外の数値が入力された場合も、エラーで停止せずに再入力を求めることができます。
6-5. 無限ループを防ぐ修正版サンプルコード
無限ループになるコードを、安全な形に修正してみます。
悪い例は次のとおりです。
C#int i = 1;
do
{
Console.WriteLine(i);
}
while (i <= 10);
このコードは、iが更新されないため無限ループになります。
修正版は次のとおりです。
C#int i = 1;
do
{
Console.WriteLine(i);
i++;
}
while (i <= 10);
さらに、ユーザー入力を使った安全な例も見てみましょう。
C#int number;
do
{
Console.Write("0を入力すると終了します: ");
string input = Console.ReadLine();
if (!int.TryParse(input, out number))
{
Console.WriteLine("数値を入力してください。");
number = -1;
continue;
}
Console.WriteLine($"入力値: {number}");
}
while (number != 0);
Console.WriteLine("終了しました");
このコードでは、数値以外が入力された場合でもプログラムは止まりません。continueによって次の繰り返しへ進み、再入力を求めます。
7. do while文で使える制御文
7-1. break文で繰り返しを終了する
do while文の中では、break文を使ってループを途中で終了できます。
C#int count = 1;
do
{
Console.WriteLine(count);
if (count == 5)
{
break;
}
count++;
}
while (count <= 10);
このコードでは、本来はcount <= 10の間ループします。しかし、countが5になった時点でbreakが実行されるため、ループは終了します。
実行結果は次のようになります。
C#1
2
3
4
5
break文は、ユーザーが終了を選択した場合や、特定の条件を満たした時点で処理を止めたい場合に役立ちます。
7-2. continue文で次の繰り返しへ進む
continue文を使うと、ループ内の残りの処理をスキップして、次の繰り返しへ進むことができます。
C#int count = 0;
do
{
count++;
if (count == 3)
{
continue;
}
Console.WriteLine(count);
}
while (count < 5);
実行結果は次のようになります。
C#1
2
4
5
countが3のときはcontinueが実行されるため、Console.WriteLine(count)がスキップされます。
continue文は、特定の条件に当てはまる場合だけ処理を飛ばしたいときに便利です。
7-3. break文とcontinue文を使ったサンプルコード
次のコードでは、break文とcontinue文を組み合わせています。
C#int number;
do
{
Console.Write("数値を入力してください(0で終了、負の数は無視): ");
string input = Console.ReadLine();
if (!int.TryParse(input, out number))
{
Console.WriteLine("数値を入力してください。");
continue;
}
if (number == 0)
{
Console.WriteLine("終了します。");
break;
}
if (number < 0)
{
Console.WriteLine("負の数は処理しません。");
continue;
}
Console.WriteLine($"入力された正の数: {number}");
}
while (true);
このコードでは、次のように処理を分けています。
C#数値以外が入力された場合 → continueで再入力
0が入力された場合 → breakで終了
負の数が入力された場合 → continueで再入力
正の数が入力された場合 → 値を表示
while (true)を使っていますが、number == 0のときにbreakで終了するため、無限に続くわけではありません。
ただし、while (true)を使う場合は、必ずループを抜ける条件を明確にしておきましょう。
8. do while文を使うときの注意点
8-1. 条件式の真偽を確認する
do while文では、条件式がtrueの間ループが続きます。そのため、条件式が正しく書けているかを確認することが重要です。
たとえば、1から5まで表示したい場合、条件式は次のようになります。
C#int i = 1;
do
{
Console.WriteLine(i);
i++;
}
while (i <= 5);
もし条件式を間違えて次のように書くと、意図した動作になりません。
C#int i = 1;
do
{
Console.WriteLine(i);
i++;
}
while (i >= 5);
この場合、i >= 5は最初の処理後にfalseになるため、1回しか実行されません。
条件式では、比較演算子の向きや、==と!=の違いに注意しましょう。
8-2. 可読性を下げないようにする
do while文は便利ですが、使いどころを間違えるとコードの可読性が下がることがあります。
たとえば、最初に条件を確認してから処理するほうが自然な場合は、while文やfor文を使ったほうが読みやすくなります。
C#int i = 1;
while (i <= 5)
{
Console.WriteLine(i);
i++;
}
このように、単純なカウント処理であればwhile文でも十分です。さらに、回数が決まっている場合はfor文のほうが適しています。
C#for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i);
}
do while文は、「最低1回は実行する必要がある」と明確にわかる場面で使うと、コードの意図が伝わりやすくなります。
8-3. while文やfor文のほうが適しているケース
do while文よりも、while文やfor文のほうが適しているケースもあります。
回数が決まっている繰り返し処理では、for文がよく使われます。
C#for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
条件を満たしている場合だけ処理したい場合は、while文が向いています。
C#while (isRunning)
{
Console.WriteLine("実行中です");
}
一方、最初の1回は必ず処理したい場合は、do while文が向いています。
C#do
{
Console.WriteLine("最低1回は実行されます");
}
while (isRunning);
それぞれの繰り返し文には向き不向きがあります。処理の目的に合わせて選ぶことが大切です。
8-4. 初心者が間違えやすい書き方
C#のdo while文で初心者が間違えやすいポイントはいくつかあります。
まず、最後のセミコロンを忘れるミスです。
C#do
{
Console.WriteLine("Hello");
}
while (true);
do while文では、最後に;が必要です。
次に、変数を更新し忘れるミスです。
C#int i = 0;
do
{
Console.WriteLine(i);
}
while (i < 5);
このコードでは、iが変化しないため無限ループになります。
正しくは次のように書きます。
C#int i = 0;
do
{
Console.WriteLine(i);
i++;
}
while (i < 5);
また、条件式の意味を逆に書いてしまうミスもあります。
C#do
{
Console.WriteLine("処理中");
}
while (isFinished);
「終了していない間続ける」のであれば、次のように書く必要があります。
C#do
{
Console.WriteLine("処理中");
}
while (!isFinished);
条件式は、ループを「続ける条件」を書く場所です。終了条件そのものを書く場合は、!を使う必要があるケースもあります。
9. do while文の実践的な使用例
9-1. メニュー処理を繰り返し表示する例
do while文は、コンソールアプリのメニュー処理でよく使われます。
次の例では、ユーザーが0を選ぶまでメニューを表示し続けます。
C#int choice;
do
{
Console.WriteLine("===== メニュー =====");
Console.WriteLine("1: 新規作成");
Console.WriteLine("2: 編集");
Console.WriteLine("3: 削除");
Console.WriteLine("0: 終了");
Console.Write("番号を選択してください: ");
string input = Console.ReadLine();
if (!int.TryParse(input, out choice))
{
Console.WriteLine("数値を入力してください。");
choice = -1;
continue;
}
switch (choice)
{
case 1:
Console.WriteLine("新規作成を選択しました。");
break;
case 2:
Console.WriteLine("編集を選択しました。");
break;
case 3:
Console.WriteLine("削除を選択しました。");
break;
case 0:
Console.WriteLine("終了します。");
break;
default:
Console.WriteLine("正しい番号を選択してください。");
break;
}
Console.WriteLine();
}
while (choice != 0);
このコードでは、メニューを最初に必ず表示したいので、do while文が適しています。
ユーザーが0を入力すると、条件式choice != 0がfalseになり、ループを終了します。
9-2. 正しい入力があるまで再入力させる例
次の例では、ユーザーが1から100までの数値を入力するまで、再入力を求めます。
C#int age;
bool isValid;
do
{
Console.Write("年齢を入力してください(1〜100): ");
string input = Console.ReadLine();
isValid = int.TryParse(input, out age);
if (!isValid)
{
Console.WriteLine("数値を入力してください。");
continue;
}
if (age < 1 || age > 100)
{
Console.WriteLine("1〜100の範囲で入力してください。");
isValid = false;
}
}
while (!isValid);
Console.WriteLine($"入力された年齢: {age}");
このコードでは、入力値が正しくない場合、isValidをfalseにして再入力を求めています。
do while文を使うことで、最初の入力受付を必ず実行し、その後に入力内容を判定できます。
9-3. ゲームやアプリの処理で使う例
ゲームやアプリでも、特定の条件になるまで処理を繰り返す場面があります。
次の例では、プレイヤーの体力が0より大きい間、ゲーム処理を繰り返します。
C#int hp = 30;
int turn = 1;
do
{
Console.WriteLine($"{turn}ターン目");
Console.WriteLine($"現在のHP: {hp}");
hp -= 10;
turn++;
Console.WriteLine("敵から10ダメージを受けました。");
Console.WriteLine();
}
while (hp > 0);
Console.WriteLine("ゲームオーバー");
実行結果は次のようになります。
C#1ターン目
現在のHP: 30
敵から10ダメージを受けました。
2ターン目
現在のHP: 20
敵から10ダメージを受けました。
3ターン目
現在のHP: 10
敵から10ダメージを受けました。
ゲームオーバー
このように、少なくとも1ターンは処理を実行したい場合にも、do while文を使うことができます。
ただし、ゲームループのような複雑な処理では、終了条件や状態管理をわかりやすく設計することが重要です。
10. C#のdo while文に関するよくある質問
10-1. do while文は必ず1回実行されますか?
はい。C#のdo while文は、条件式の判定より先にdoブロック内の処理を実行します。
そのため、条件式が最初からfalseであっても、処理は必ず1回実行されます。
C#int x = 100;
do
{
Console.WriteLine("1回は実行されます");
}
while (x < 10);
このコードでは、x < 10はfalseですが、メッセージは1回表示されます。
10-2. do while文とwhile文はどちらを使うべきですか?
最初に条件を判定したい場合はwhile文を使います。最低1回は処理を実行したい場合はdo while文を使います。
たとえば、条件を満たす場合だけ処理したいならwhile文が適しています。
C#while (条件式)
{
// 条件がtrueの場合だけ実行
}
一方、ユーザー入力やメニュー表示のように、最初の1回は必ず実行したいならdo while文が適しています。
C#do
{
// 最低1回は実行
}
while (条件式);
処理の前に条件を確認するべきか、処理の後に条件を確認するべきかで使い分けましょう。
10-3. do while文で無限ループしたらどうすればよいですか?
do while文で無限ループした場合は、まず条件式を確認しましょう。
特に、次の点をチェックしてください。
C#条件式が常にtrueになっていないか
条件式に使っている変数をループ内で更新しているか
break文で抜ける条件があるか
ユーザー入力が終了条件に到達できる設計になっているか
たとえば、次のコードは無限ループになります。
C#int i = 1;
do
{
Console.WriteLine(i);
}
while (i <= 5);
iが更新されていないため、条件式がずっとtrueになります。
修正するには、ループ内でi++を追加します。
C#int i = 1;
do
{
Console.WriteLine(i);
i++;
}
while (i <= 5);
また、実行中のコンソールアプリが止まらなくなった場合は、開発環境の停止ボタンやショートカットキーでプログラムを停止します。その後、条件式や変数の更新処理を見直しましょう。
10-4. do while文の最後にセミコロンは必要ですか?
はい。C#のdo while文では、最後のwhile (条件式)の後にセミコロン;が必要です。
正しい書き方は次のとおりです。
C#do
{
Console.WriteLine("Hello");
}
while (条件式);
最後のセミコロンを忘れると、コンパイルエラーになります。
通常のwhile文では次のように書くため、セミコロンは不要です。
C#while (条件式)
{
Console.WriteLine("Hello");
}
do while文とwhile文では書き方が違うため、混同しないようにしましょう。
まとめ
C#のdo while文は、条件式がtrueである間、処理を繰り返すための構文です。最大の特徴は、条件判定より先に処理を実行するため、最低1回は必ず処理が実行されることです。
基本構文は次のとおりです。
C#do
{
// 繰り返したい処理
}
while (条件式);
while文は条件を先に判定するのに対し、do while文は処理を実行した後に条件を判定します。そのため、メニュー表示、ユーザー入力、再入力処理など、最初の1回を必ず実行したい場面に向いています。
一方で、条件式が常にtrueになったり、条件に関係する変数を更新し忘れたりすると、無限ループが発生します。do while文を使うときは、終了条件を明確にし、ループ内で必要な変数を更新することが大切です。
また、break文を使えば途中でループを終了でき、continue文を使えば次の繰り返しへ進むことができます。ただし、多用すると処理の流れが読みにくくなるため、使いすぎには注意しましょう。
C#で繰り返し処理を書くときは、do while文、while文、for文の特徴を理解し、処理の目的に合った構文を選ぶことが重要です。

