C#のdo-while文とは?使い方・whileとの違い・無限ループを防ぐ書き方を初心者向けに解説
はじめに
C#で繰り返し処理を書くときによく使われる構文には、for文、while文、そしてdo-while文があります。
その中でもdo-while文は、条件に関係なく処理を最低1回は実行したいときに便利な繰り返し構文です。
たとえば、ユーザーにメニューを表示する処理や、入力値が正しくなるまで再入力させる処理では、最初の1回目の表示や入力受付を必ず行いたい場面があります。このようなときにdo-while文が役立ちます。
この記事では、C#のdo-while文について、基本構文、while文との違い、具体的な使い方、無限ループを防ぐ書き方まで、初心者向けにわかりやすく解説します。
1. C#のdo-while文とは?初心者向けに基本を解説
C#のdo-while文は、繰り返し処理を行うための構文です。
通常、繰り返し処理では「条件が成り立つ間だけ処理を繰り返す」という書き方をします。do-while文も条件によって繰り返すかどうかを判断しますが、特徴的なのは条件判定より先に処理を実行する点です。
1-1. do-while文は「条件に関係なく必ず1回は実行する」繰り返し処理
do-while文の最大の特徴は、条件がtrueかfalseかに関係なく、最初の1回は必ず処理が実行されることです。
通常のwhile文では、最初に条件を判定します。そのため、条件が最初からfalseの場合、処理は一度も実行されません。
一方、do-while文では、まずdoブロック内の処理を実行し、その後で条件式を判定します。
C#do
{
// ここに書いた処理は必ず1回は実行される
}
while (条件式);
この性質により、ユーザー入力やメニュー表示など、「まず一度は処理したい」場面で使いやすい構文です。
1-2. C#におけるdo文・do-while文の役割
C#では、doとwhileを組み合わせてdo-while文を書きます。
doは「まずこの処理を実行する」という意味を持ち、whileは「条件が成り立つ間、繰り返す」という意味を持ちます。
つまり、C#のdo-while文は次のような流れで動きます。
doブロック内の処理を実行するwhileの条件式を判定する条件が
trueならもう一度繰り返す条件が
falseならループを終了する
C# doと検索している人は、doというキーワード単体の意味を知りたい場合も多いですが、実際にはdoはwhileとセットで使い、do-while文として繰り返し処理を作ります。
1-3. do-while文が使われる代表的な場面
do-while文は、最低1回は処理を実行したい場面でよく使われます。
代表的な例は次の通りです。
ユーザーにメニューを表示し、終了が選ばれるまで繰り返す
入力値が正しくなるまで再入力させる
パスワードが一致するまで入力を求める
処理が失敗したときに一定回数リトライする
ゲームのループ処理で最低1回は画面を更新する
特に、コンソールアプリでユーザー入力を扱う場合、do-while文は非常に理解しやすい書き方になります。
2. C#のdo-while文の書き方
ここからは、C#におけるdo-while文の基本的な書き方を見ていきましょう。
2-1. do-while文の基本構文
C#のdo-while文は、次のように書きます。
C#do
{
繰り返したい処理;
}
while (条件式);
ポイントは、doの後ろに処理ブロックを書き、その後にwhile (条件式);を書くことです。
たとえば、変数countが3以下の間だけ繰り返す処理は次のようになります。
C#int count = 1;
do
{
Console.WriteLine(count);
count++;
}
while (count <= 3);
このコードを実行すると、次のように表示されます。
1
2
3
2-2. whileの後ろにセミコロンが必要な理由
do-while文では、最後のwhile (条件式)の後ろにセミコロン;が必要です。
C#do
{
Console.WriteLine("Hello");
}
while (true);
while文では通常、次のようにセミコロンを付けません。
C#while (条件式)
{
処理;
}
しかし、do-while文の場合は、do { } while (条件式);全体で1つの文として扱われます。そのため、最後に文の終わりを表すセミコロンが必要になります。
初心者がよく間違えるポイントなので、do-while文の最後には必ず;を付けると覚えておきましょう。
2-3. 条件式にはbool型の式を書く
C#のdo-while文の条件式には、bool型の式を書く必要があります。
つまり、結果がtrueまたはfalseになる式を書く必要があります。
C#int count = 1;
do
{
Console.WriteLine(count);
count++;
}
while (count <= 5);
この場合、count <= 5は、条件を満たしていればtrue、満たしていなければfalseになります。
C#では、C言語のように0をfalse、1をtrueとして扱うことはできません。
たとえば、次のような書き方はC#ではエラーになります。
C#int count = 1;
do
{
Console.WriteLine(count);
}
while (count);
countはint型であり、bool型ではないためです。
条件式には、必ず次のような比較式や論理式を書きましょう。
C#count < 10
input != "exit"
isSuccess == false
retryCount <= maxRetry
2-4. 最小コードで動きを確認するサンプル
まずは、do-while文の動きを最小限のコードで確認してみましょう。
C#int number = 1;
do
{
Console.WriteLine("number = " + number);
number++;
}
while (number <= 3);
実行結果は次のようになります。
number = 1
number = 2
number = 3
処理の流れは次の通りです。
最初にnumberは1です。doブロック内でnumberを表示し、その後number++で値を1増やします。その後、while (number <= 3)の条件を判定します。
numberが4になった時点で条件がfalseになるため、ループが終了します。
3. do-while文の実行順序を図解イメージで理解する
do-while文を理解するうえで重要なのは、実行順序です。
while文やfor文に慣れていると、「条件を先に見る」と考えがちですが、do-while文では順番が逆になります。
3-1. まずdoブロック内の処理を実行する
do-while文では、まずdoブロック内の処理が実行されます。
C#do
{
Console.WriteLine("処理を実行しました");
}
while (条件式);
この段階では、まだ条件式は判定されていません。
そのため、条件式が最初からfalseになるような内容であっても、doブロック内の処理は必ず1回実行されます。
3-2. その後にwhileの条件式を判定する
doブロック内の処理が終わると、次にwhileの条件式を判定します。
C#while (count <= 5);
条件式の結果がtrueであれば、もう一度doブロックに戻ります。
条件式の結果がfalseであれば、do-while文を終了し、次の処理へ進みます。
3-3. 条件がtrueなら繰り返し、falseなら終了する
do-while文の流れを言葉で表すと、次のようになります。
doブロックを実行
↓
条件式を判定
↓
trueなら繰り返す
↓
falseなら終了する
たとえば、次のコードを見てください。
C#int count = 1;
do
{
Console.WriteLine(count);
count++;
}
while (count <= 3);
Console.WriteLine("終了しました");
実行結果は次の通りです。
1
2
3
終了しました
countが4になるとcount <= 3がfalseになるため、ループを抜けて「終了しました」が表示されます。
3-4. 条件が最初からfalseでも1回は実行される例
do-while文の特徴がよくわかる例を見てみましょう。
C#int count = 10;
do
{
Console.WriteLine("count = " + count);
}
while (count < 5);
このコードでは、最初からcount < 5はfalseです。
しかし、実行結果は次のようになります。
count = 10
なぜなら、do-while文では条件判定よりも先にdoブロックが実行されるからです。
このように、条件が最初からfalseであっても1回は実行される点が、while文との大きな違いです。
4. C#のdo-while文とwhile文の違い
do-while文を理解するには、while文との違いを押さえることが重要です。
どちらも条件によって繰り返し処理を行う構文ですが、条件を判定するタイミングが異なります。
4-1. while文は条件判定が先、do-while文は処理が先
while文は、最初に条件式を判定します。
C#while (条件式)
{
処理;
}
一方、do-while文は、最初に処理を実行します。
C#do
{
処理;
}
while (条件式);
つまり、while文は「条件を確認してから実行する」、do-while文は「実行してから条件を確認する」という違いがあります。
4-2. 実行回数の違い:whileは0回以上、do-whileは1回以上
while文とdo-while文では、最小実行回数が異なります。
while文は、条件が最初からfalseなら一度も実行されません。つまり、実行回数は0回以上です。
一方、do-while文は、条件が最初からfalseでも必ず1回は実行されます。つまり、実行回数は1回以上です。
while文 :0回以上実行される
do-while文 :1回以上実行される
この違いを理解しておくと、どちらを使うべきか判断しやすくなります。
4-3. 同じ処理をwhile文とdo-while文で書き比べる
同じカウントアップ処理を、while文とdo-while文で書き比べてみましょう。
まずはwhile文です。
C#int count = 1;
while (count <= 3)
{
Console.WriteLine(count);
count++;
}
次にdo-while文です。
C#int count = 1;
do
{
Console.WriteLine(count);
count++;
}
while (count <= 3);
どちらも実行結果は同じです。
1
2
3
ただし、初期値を変えると違いが出ます。
C#int count = 10;
while (count <= 3)
{
Console.WriteLine(count);
count++;
}
このwhile文は何も表示しません。
一方、次のdo-while文は1回だけ表示されます。
C#int count = 10;
do
{
Console.WriteLine(count);
count++;
}
while (count <= 3);
実行結果は次の通りです。
10
4-4. どちらを使うべきか判断する基準
while文とdo-while文の使い分けは、次の基準で考えるとわかりやすいです。
最初に条件を確認して、条件を満たす場合だけ処理したいならwhile文を使います。
一方、条件に関係なく、まず1回は処理を実行したいならdo-while文を使います。
たとえば、ユーザー入力を受け付ける処理では、入力してもらわないと正しいかどうか判定できません。そのため、最初に入力処理を実行し、その後で条件を判定するdo-while文が向いています。
C#string input;
do
{
Console.Write("名前を入力してください: ");
input = Console.ReadLine() ?? "";
}
while (input == "");
このように、入力、メニュー、リトライ処理ではdo-while文が自然な書き方になります。
5. do-while文の具体的な使い方・サンプルコード
ここからは、C#のdo-while文を使った具体的なサンプルコードを紹介します。
初心者の方は、実際にコードを書いて動きを確認しながら理解すると身につきやすくなります。
5-1. カウントアップ処理をdo-while文で書く
まずは基本的なカウントアップ処理です。
C#int count = 1;
do
{
Console.WriteLine(count);
count++;
}
while (count <= 5);
実行結果は次のようになります。
1
2
3
4
5
count++を書き忘れると、countの値が変わらず、条件がずっとtrueのままになる可能性があります。
そのため、カウントアップ処理では、ループ内で変数を更新することが重要です。
5-2. ユーザー入力を最低1回受け付ける処理
do-while文は、ユーザー入力を扱う処理と相性が良いです。
次のコードは、空文字が入力された場合に再入力を求める例です。
C#string name;
do
{
Console.Write("名前を入力してください: ");
name = Console.ReadLine() ?? "";
}
while (name == "");
Console.WriteLine("こんにちは、" + name + "さん");
このコードでは、最初に必ず名前の入力を求めます。
入力された値が空文字の場合は、条件式name == ""がtrueになるため、再び入力を求めます。
5-3. メニュー画面を「終了」が選ばれるまで表示する処理
メニュー画面も、do-while文がよく使われる場面です。
C#int choice;
do
{
Console.WriteLine("メニューを選択してください");
Console.WriteLine("1: 新規作成");
Console.WriteLine("2: 編集");
Console.WriteLine("3: 終了");
Console.Write("選択: ");
string input = Console.ReadLine() ?? "";
int.TryParse(input, out choice);
if (choice == 1)
{
Console.WriteLine("新規作成を選びました");
}
else if (choice == 2)
{
Console.WriteLine("編集を選びました");
}
else if (choice == 3)
{
Console.WriteLine("終了します");
}
else
{
Console.WriteLine("正しい番号を入力してください");
}
}
while (choice != 3);
このコードでは、choiceが3でない間、メニューを繰り返し表示します。
ユーザーが「3: 終了」を選ぶと、choice != 3がfalseになり、ループが終了します。
5-4. 入力値が正しくなるまで再入力させる処理
数値入力のチェックにもdo-while文を使えます。
C#int age;
bool isValid;
do
{
Console.Write("年齢を入力してください: ");
string input = Console.ReadLine() ?? "";
isValid = int.TryParse(input, out age);
if (!isValid)
{
Console.WriteLine("数値を入力してください");
}
}
while (!isValid);
Console.WriteLine("入力された年齢は " + age + " 歳です");
int.TryParseは、文字列を整数に変換できるかどうかを判定するメソッドです。
変換できればtrue、変換できなければfalseを返します。
この例では、正しい数値が入力されるまでループを繰り返します。
5-5. リトライ処理にdo-while文を使う例
処理が失敗したときに、一定回数まで再試行するリトライ処理にもdo-while文を使えます。
C#int retryCount = 0;
int maxRetry = 3;
bool success = false;
do
{
retryCount++;
Console.WriteLine("処理を実行します。試行回数: " + retryCount);
// 例として、3回目で成功したことにする
if (retryCount == 3)
{
success = true;
Console.WriteLine("処理に成功しました");
}
else
{
Console.WriteLine("処理に失敗しました");
}
}
while (!success && retryCount < maxRetry);
if (!success)
{
Console.WriteLine("最大リトライ回数に達しました");
}
このコードでは、処理が成功するか、リトライ回数が上限に達するまで繰り返します。
無限にリトライしないように、retryCount < maxRetryという終了条件を入れている点が重要です。
6. do-while文で無限ループを防ぐ書き方
do-while文を使うときに注意したいのが、無限ループです。
無限ループとは、条件がずっとtrueのままになり、処理が終わらなくなる状態のことです。
6-1. 無限ループが起きる主な原因
do-while文で無限ループが起きる主な原因は、次のようなものです。
条件式が常に
trueになっている条件式に使っている変数をループ内で更新していない
終了条件を決めずに書いている
入力値によって終了できない作りになっている
continueによって更新処理が飛ばされている
特に初心者の場合、カウンター変数の更新忘れによる無限ループがよくあります。
6-2. 条件式に使う変数をループ内で更新する
次のコードは、無限ループになる危険があります。
C#int count = 1;
do
{
Console.WriteLine(count);
}
while (count <= 5);
countの値がループ内で変わらないため、count <= 5がずっとtrueのままです。
正しくは、ループ内でcountを更新します。
C#int count = 1;
do
{
Console.WriteLine(count);
count++;
}
while (count <= 5);
条件式に使う変数は、必ずループ内で変化するようにしましょう。
6-3. 終了条件を明確に決めてから書く
do-while文を書く前に、「どの状態になったらループを終了するのか」を決めておくことが大切です。
たとえば、メニュー処理なら次のように考えます。
終了条件:ユーザーが3を入力したら終了する
継続条件:ユーザーが3以外を入力している間は繰り返す
これをコードにすると、次のようになります。
C#do
{
// メニュー表示と入力処理
}
while (choice != 3);
終了条件があいまいなまま書くと、ループが終わらない原因になります。
6-4. break文で安全にループを抜ける
break文を使うと、条件式の結果に関係なくループを終了できます。
C#while (true)
{
Console.Write("終了するには exit と入力してください: ");
string input = Console.ReadLine() ?? "";
if (input == "exit")
{
break;
}
Console.WriteLine("入力内容: " + input);
}
do-while文でもbreakは使えます。
C#do
{
Console.Write("コマンドを入力してください: ");
string command = Console.ReadLine() ?? "";
if (command == "exit")
{
Console.WriteLine("終了します");
break;
}
Console.WriteLine("実行: " + command);
}
while (true);
while (true)のように意図的に無限ループを書く場合でも、breakで抜ける条件を明確にしておけば安全に使えます。
6-5. カウンターや最大回数を設定して暴走を防ぐ
ユーザー入力や通信処理などでは、何らかの理由で終了条件を満たせないことがあります。
そのため、最大回数を設定しておくと安全です。
C#int count = 0;
int maxCount = 5;
string input;
do
{
Console.Write("OKと入力してください: ");
input = Console.ReadLine() ?? "";
count++;
if (input == "OK")
{
Console.WriteLine("正しく入力されました");
break;
}
Console.WriteLine("入力が正しくありません");
}
while (count < maxCount);
if (input != "OK")
{
Console.WriteLine("入力回数の上限に達しました");
}
このように最大回数を設定しておくことで、想定外の入力が続いてもループが暴走するのを防げます。
6-6. 無限ループになりやすいNGコード例
次のコードは、初心者が書きがちなNG例です。
C#int count = 1;
do
{
Console.WriteLine(count);
}
while (count <= 10);
このコードではcountが更新されていないため、無限ループになります。
修正後は次の通りです。
C#int count = 1;
do
{
Console.WriteLine(count);
count++;
}
while (count <= 10);
また、次のように条件が常にtrueになるコードにも注意が必要です。
C#do
{
Console.WriteLine("繰り返します");
}
while (1 == 1);
1 == 1は常にtrueなので、ループは終了しません。
意図的に無限ループを使う場合を除き、条件式がいつかfalseになるように設計しましょう。
7. do-while文でよくあるエラーと注意点
do-while文は構文自体はシンプルですが、初心者がつまずきやすいポイントがあります。
ここでは、よくあるエラーと注意点を解説します。
7-1. whileの後ろにセミコロンを書き忘れる
do-while文では、最後のwhileの後ろにセミコロンが必要です。
間違った例です。
C#do
{
Console.WriteLine("Hello");
}
while (true)
正しくは次のように書きます。
C#do
{
Console.WriteLine("Hello");
}
while (true);
do-while文の最後には;を書く、と覚えておきましょう。
7-2. 条件式が常にtrueになっている
条件式が常にtrueになると、ループは終了しません。
C#do
{
Console.WriteLine("終了しません");
}
while (true);
このようなコードを書く場合は、必ずbreakなどで抜ける処理を入れる必要があります。
C#do
{
Console.Write("終了するには exit と入力してください: ");
string input = Console.ReadLine() ?? "";
if (input == "exit")
{
break;
}
}
while (true);
7-3. 変数の初期化や更新位置を間違える
変数の初期化や更新位置を間違えると、期待した回数だけループしないことがあります。
たとえば、次のコードは毎回countが1に戻ってしまうため、正しく動きません。
C#do
{
int count = 1;
Console.WriteLine(count);
count++;
}
while (count <= 5);
このコードでは、countがdoブロック内で宣言されているため、whileの条件式で使えません。
正しくは、ループの外で変数を宣言します。
C#int count = 1;
do
{
Console.WriteLine(count);
count++;
}
while (count <= 5);
ループ条件に使う変数は、基本的にループの外で宣言し、ループ内で更新します。
7-4. breakとcontinueの使い方を混同する
breakとcontinueは、どちらもループ内で使える制御文ですが、役割が異なります。
breakはループを終了します。
C#do
{
string input = Console.ReadLine() ?? "";
if (input == "exit")
{
break;
}
}
while (true);
一方、continueは現在の処理をスキップし、次の繰り返しに進みます。
C#int count = 0;
do
{
count++;
if (count == 3)
{
continue;
}
Console.WriteLine(count);
}
while (count < 5);
このコードの実行結果は次のようになります。
1
2
4
5
countが3のときだけConsole.WriteLine(count);がスキップされます。
do-while文でcontinueを使うと、残りの処理を飛ばして条件判定に進みます。そのため、更新処理をcontinueより後ろに書いていると、無限ループの原因になることがあります。
7-5. ネストが深くなり読みにくくなる
do-while文の中にif文や別のループをたくさん入れると、コードが読みにくくなります。
C#do
{
if (condition1)
{
if (condition2)
{
while (condition3)
{
// 処理
}
}
}
}
while (condition4);
このようにネストが深くなると、どこで処理が終わるのか分かりにくくなります。
読みやすくするには、次のような工夫が有効です。
処理をメソッドに分ける
早めに
breakやreturnで抜ける条件式をわかりやすい変数名にする
1つのループに多くの役割を持たせすぎない
初心者のうちは、1つのdo-while文では1つの目的だけを扱うようにすると、コードが読みやすくなります。
8. do-while文・while文・for文の使い分け
C#には複数の繰り返し構文があります。
それぞれの特徴を理解しておくと、場面に応じて適切な構文を選べます。
8-1. 回数が決まっているならfor文
繰り返す回数が最初から決まっている場合は、for文が向いています。
C#for (int i = 1; i <= 10; i++)
{
Console.WriteLine(i);
}
たとえば、1から10まで表示する、配列の要素を順番に処理する、指定回数だけ繰り返すといった処理ではfor文がよく使われます。
for文は、初期化、条件式、更新処理を1行にまとめて書けるため、回数が決まっているループに適しています。
8-2. 条件を満たす間だけ繰り返すならwhile文
繰り返す回数は決まっていないけれど、条件を満たす間だけ処理したい場合はwhile文が向いています。
C#while (isRunning)
{
Console.WriteLine("処理中です");
}
ただし、while文は最初に条件を判定するため、条件が最初からfalseの場合は一度も実行されません。
「条件を満たしている場合だけ実行したい」という場面では、while文が自然です。
8-3. 最低1回実行したいならdo-while文
最低1回は必ず処理したい場合は、do-while文が向いています。
C#string input;
do
{
Console.Write("入力してください: ");
input = Console.ReadLine() ?? "";
}
while (input == "");
このように、ユーザーに入力してもらわないと条件を判定できない処理では、do-while文が使いやすいです。
8-4. 初心者が迷ったときの選び方
初心者が繰り返し構文で迷ったときは、次のように考えると選びやすくなります。
回数が決まっている → for文
条件を先に判定したい → while文
最低1回は実行したい → do-while文
たとえば、10回繰り返すならfor文です。
条件が成り立つ間だけ処理したいならwhile文です。
ユーザー入力やメニュー表示のように、まず1回は処理したいならdo-while文です。
この基準を覚えておくと、C#の繰り返し処理を使い分けやすくなります。
9. C#のdo-while文を理解するための練習問題
ここでは、do-while文を理解するための練習問題を紹介します。
実際にコードを書いて動かすことで、do-while文の動きがより理解しやすくなります。
9-1. 1から10まで表示する問題
問題です。
do-while文を使って、1から10までの数字を表示してください。
解答例です。
C#int number = 1;
do
{
Console.WriteLine(number);
number++;
}
while (number <= 10);
実行結果は次の通りです。
1
2
3
4
5
6
7
8
9
10
ポイントは、number++で変数を更新していることです。
9-2. 正しいパスワードが入力されるまで繰り返す問題
問題です。
正しいパスワード"abc123"が入力されるまで、入力を繰り返してください。
解答例です。
C#string password;
do
{
Console.Write("パスワードを入力してください: ");
password = Console.ReadLine() ?? "";
if (password != "abc123")
{
Console.WriteLine("パスワードが違います");
}
}
while (password != "abc123");
Console.WriteLine("ログイン成功");
このコードでは、正しいパスワードが入力されるまでpassword != "abc123"がtrueになります。
正しいパスワードが入力されると条件がfalseになり、ループが終了します。
9-3. メニューを繰り返し表示する問題
問題です。
次のメニューを表示し、ユーザーが3を選ぶまで繰り返してください。
1: 表示
2: 設定
3: 終了
解答例です。
C#int menu;
do
{
Console.WriteLine("1: 表示");
Console.WriteLine("2: 設定");
Console.WriteLine("3: 終了");
Console.Write("番号を選んでください: ");
string input = Console.ReadLine() ?? "";
int.TryParse(input, out menu);
switch (menu)
{
case 1:
Console.WriteLine("表示を選びました");
break;
case 2:
Console.WriteLine("設定を選びました");
break;
case 3:
Console.WriteLine("終了します");
break;
default:
Console.WriteLine("1から3の番号を入力してください");
break;
}
}
while (menu != 3);
メニュー処理では、最初に必ずメニューを表示したいので、do-while文が適しています。
9-4. 無限ループを修正する問題
問題です。
次のコードは無限ループになります。原因を考えて、修正してください。
C#int count = 1;
do
{
Console.WriteLine(count);
}
while (count <= 5);
原因は、countの値がループ内で更新されていないことです。
修正例です。
C#int count = 1;
do
{
Console.WriteLine(count);
count++;
}
while (count <= 5);
実行結果は次の通りです。
1
2
3
4
5
do-while文では、条件式に使う変数をループ内で変化させることが大切です。
10. C#のdo-while文に関するよくある質問
最後に、C#のdo-while文について初心者が疑問に思いやすい点を解説します。
10-1. do-while文は実務で使うのか?
do-while文は実務でも使われます。
ただし、for文やwhile文に比べると、登場回数はやや少ない場合があります。
実務では、次のような場面で使われることがあります。
入力チェック
メニュー処理
リトライ処理
最低1回は実行する必要がある処理
条件判定に必要な値をループ内で取得する処理
特に、処理を実行したあとで継続するか判断する場合には、do-while文が読みやすいコードになります。
10-2. do-while文とwhile文はどちらを覚えるべきか?
どちらも覚えておくべきです。
while文は、条件を先に判定する繰り返し処理で、非常によく使われます。
do-while文は、処理を先に実行してから条件を判定する繰り返し処理です。
使う場面が少し違うため、両方の特徴を理解しておくと、コードを書きやすくなります。
初心者はまず、次の違いを覚えるとよいでしょう。
while文 :条件を先に判定する
do-while文 :処理を先に実行する
この違いがわかれば、使い分けは難しくありません。
10-3. do-while文でbreakを使ってもよいのか?
do-while文でbreakを使っても問題ありません。
breakを使うと、条件式の結果に関係なくループを終了できます。
C#do
{
Console.Write("コマンドを入力してください: ");
string command = Console.ReadLine() ?? "";
if (command == "exit")
{
break;
}
Console.WriteLine(command + "を実行しました");
}
while (true);
このように、while (true)でループしながら、特定の条件でbreakする書き方もあります。
ただし、breakが多すぎると処理の流れが分かりにくくなるため、使いすぎには注意しましょう。
10-4. do-while文を使わずwhile文だけで書けるのか?
多くの場合、do-while文を使わずにwhile文だけで書くこともできます。
たとえば、次のdo-while文があります。
C#string input;
do
{
Console.Write("入力してください: ");
input = Console.ReadLine() ?? "";
}
while (input == "");
これをwhile文で書くと、次のようになります。
C#string input = "";
while (input == "")
{
Console.Write("入力してください: ");
input = Console.ReadLine() ?? "";
}
どちらも同じような処理ができます。
ただし、「最低1回実行する」という意図を明確に表したい場合は、do-while文のほうが自然で読みやすいことがあります。
まとめ
C#のdo-while文は、条件に関係なく最低1回は処理を実行する繰り返し構文です。
基本構文は次の通りです。
C#do
{
繰り返したい処理;
}
while (条件式);
do-while文では、まずdoブロック内の処理を実行し、その後にwhileの条件式を判定します。条件がtrueなら繰り返し、falseなら終了します。
while文との大きな違いは、条件判定のタイミングです。
while文 :条件判定が先、処理は0回以上
do-while文 :処理が先、処理は1回以上
そのため、ユーザー入力、メニュー表示、リトライ処理など、最低1回は処理を実行したい場面ではdo-while文が便利です。
一方で、do-while文では無限ループにも注意が必要です。条件式に使う変数をループ内で更新し、終了条件を明確にしてから書くことが大切です。
C#で繰り返し処理を書くときは、回数が決まっているならfor文、条件を先に判定したいならwhile文、最低1回実行したいならdo-while文、という基準で使い分けるとよいでしょう。

