C#のwhile文は、条件が成り立つあいだ同じ処理を繰り返すための基本構文です。
条件の書き方やループの抜け方を理解していないと、プログラムが止まらなくなる無限ループの原因にもなります。
この記事では、while文の基本構文から具体的な使い方、注意点までを図解とサンプルコードでやさしく解説します。
C#のwhile文とは
while文の役割
while文は、「ある条件がtrueのあいだ、同じ処理を繰り返す」ための制御構文です。
最もシンプルな繰り返し処理であり、回数が決まっていないループに適しています。
代表的な利用シーン
- ユーザーからの入力が「終了」を意味する値になるまで繰り返す
- ファイルやネットワークからデータを読み込めるだけ読み続ける
- 条件を満たすまでゲームの状態を更新し続ける
while文の基本構文
構文の形
C#のwhile文は、次のような構文で記述します。
while (条件式)
{
// 繰り返し実行したい処理
}
条件式がtrueのあいだ、波かっこ内の処理が繰り返し実行されます。
条件式が最初からfalseの場合は、1回も実行されません。
処理の流れを図で理解する

図のように、while文は次の順番で動きます。
- 条件式を評価する
- 条件式がtrueなら、波かっこ内の処理を実行する
- 処理が終わったら、再び条件式を評価する
- 条件式がfalseになるまで1〜3を繰り返す
「条件 → 処理 → 条件 → 処理…」というサイクルをイメージしておくと理解しやすくなります。
シンプルなwhile文の例
1から5までの数値を表示する
もっとも基本的な例として、1から5までの数を表示するプログラムを作ってみます。
using System;
class Program
{
static void Main()
{
int i = 1; // カウンター用の変数iを1で初期化
while (i <= 5) // iが5以下のあいだ、ループを続ける
{
Console.WriteLine(i); // 現在のiの値を出力
i++; // iを1増やす(これを忘れると無限ループになる)
}
}
}
1
2
3
4
5
この例では、変数iの値を少しずつ変化させて、条件式をいつかfalseにすることで、ループを終了しています。
カウンター変数と条件式の関係

図のように、ループのたびにカウンター変数iが変化し、それに応じて条件式の結果も変わっていきます。
iが6になった時点で条件i <= 5はfalseとなり、ループを抜けます。
無限ループとその防ぎ方
無限ループの例
条件式がいつまでもtrueのままだと、ループが終わらない無限ループになってしまいます。
using System;
class Program
{
static void Main()
{
int i = 1;
while (i <= 5)
{
Console.WriteLine(i);
// i++ を書き忘れているため、iはずっと1のまま
}
}
}
このコードは、1を永遠に表示し続けます。
原因は「ループ内でiを変化させていない」ことです。
無限ループを防ぐためのチェックポイント
while文を書くときは次の3点を必ずセットで考えると安全です。
- 初期値をどのように設定するか
- 条件式をどう書くか(cst-code>
i <= 5など) - ループ内で変数をどう変化させるか(
i++など)
この3つが正しく連携していれば、無限ループは基本的に防げます。
ユーザー入力とwhile文(終了条件がわからない場合)
入力が「exit」になるまで繰り返す
回数が事前に決まっていないケースでは、while文が特に活躍します。
次の例では、ユーザーがexitと入力するまで、文字列を受け取り続けます。
using System;
class Program
{
static void Main()
{
string input = ""; // 空文字で初期化
Console.WriteLine("文字列を入力してください(exitで終了します)");
while (input != "exit") // 入力がexitでないあいだループ
{
Console.Write("入力: ");
input = Console.ReadLine(); // ユーザーから1行読み込む
if (input != "exit")
{
Console.WriteLine("あなたが入力したのは: " + input);
}
}
Console.WriteLine("終了します。");
}
}
文字列を入力してください(exitで終了します)
入力: Hello
あなたが入力したのは: Hello
入力: test
あなたが入力したのは: test
入力: exit
終了します。
ここでは「exitと入力されたら終了する」という条件をwhileの条件式で表現しています。
入力と条件の関係を図で見る

回数が決まっていない繰り返し処理では、このように「特定の入力・状態になったら終了する」という条件を設計することが重要です。
breakとcontinueでループを制御する
breakでループを抜ける
while文の途中で、条件式とは別の理由でループを終了したい場合はbreakを使います。
using System;
class Program
{
static void Main()
{
int i = 1;
while (true) // とりあえず無条件でループ
{
Console.WriteLine(i);
if (i >= 5) // iが5以上になったらループを抜ける
{
break; // ここでwhileループを終了
}
i++;
}
Console.WriteLine("ループを終了しました");
}
}
1
2
3
4
5
ループを終了しました
while(true)とbreakの組み合わせは、「条件を途中で柔軟に判定したい場合」によく使われます。
continueで1回分の処理をスキップする
continueは、ループの途中で残りの処理をスキップして次の周回に進むときに使います。
using System;
class Program
{
static void Main()
{
int i = 0;
while (i < 5)
{
i++; // まずiを1増やす
if (i == 3)
{
// iが3のときだけ、この周の残り処理をスキップ
continue;
}
Console.WriteLine(i); // iが3のときは実行されない
}
}
}
1
2
4
5
この例では3だけが表示されません。
「特定の条件のときだけ処理したくない」場合に便利です。
while文とdo-while文の違い
do-while文の特徴
C#にはdo-while文という、while文と似た構文もあります。
do
{
// 処理
} while (条件式);
do-while文は、「必ず1回は処理を実行してから条件を判定する」という点がwhile文と異なります。
whileとdo-whileの比較

文章でまとめると次のような違いがあります。
| 構文 | 条件を判定するタイミング | 処理が0回で終わる可能性 |
|---|---|---|
| while文 | 処理の前 | あり |
| do-while文 | 処理の後 | なし(必ず1回は実行) |
「最初の1回は必ず実行したいかどうか」で、while文とdo-while文を使い分けることができます。
for文との違いと使い分け
while文とfor文の特徴
for文は「回数がはっきり決まっている繰り返し」に向いた構文です。
一方、while文は回数がはっきりしない場合に向いています。
1から5まで表示するfor文の例
using System;
class Program
{
static void Main()
{
for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i);
}
}
}
1
2
3
4
5
このように、for文は「初期化・条件・増減」が1行にまとまっているため、単純なカウンター型のループにはfor文が読みやすいことが多いです。
使い分けのイメージ

まとめると、次のように考えると自然です。
- 回数が明確にわかっている → for文を優先
- 回数が事前にはわからない(入力や状態によって決まる) → while文を優先
よくあるエラーと注意点
条件式の書き間違い
while文では条件式のミスがバグの原因になりがちです。
- 比較演算子
==と=の混同 <と<=を間違える- 条件を逆に書いてしまう など
// よくない例: 常にtrueになってしまう可能性
while (i = 0) // C#ではコンパイルエラーになるが、意図としては危険な書き方
{
// ...
}
C#ではi = 0は代入となり、bool型ではないためコンパイルエラーになりますが、「条件式にはbool型の結果しか書けない」というルールを意識しておくと安心です。
ループ内処理が重すぎる場合
ループ回数が多い場合、1回あたりの処理が重いとパフォーマンスに影響します。
特に、ファイルアクセスやネットワークアクセスをループ内で何度も行う場合は、必要最小限にする工夫が重要です。
まとめ
while文は、「条件がtrueのあいだ処理を繰り返す」ための基本構文です。
条件式がtrueのままだと無限ループになるため、初期値・条件式・変数の変化の3点をセットで考えることが大切です。
回数が事前にわからない繰り返し(ユーザー入力や状態による終了)では、while文が特に有効です。
for文やdo-while文との違いも押さえながら、状況に応じて使い分けることで、読みやすく安全なC#コードを書けるようになります。
