- Day 12 のゴールと全体イメージ
- while 文の基本構造
- 具体例1:1〜10 を while 文で表示する
- while 文の設計で大事なこと
- 具体例2:ユーザー入力で繰り返しを続ける
- do while 文の基本構造
- 具体例3:メニューを最低1回は表示する
- 無限ループとは何か
- 具体例4:意図的な無限ループ + break で抜ける
- 無限ループになってしまう典型的なミス
- Day 12 のまとめ
- Day 12 ミニ課題のゴール
- 仕様を日本語で整理する
- while 版:条件でループを続ける
- do while 版:最低1回は必ず実行する
- 無限ループ版:while(true) + break で抜ける
- 3パターンの違いを整理する
- 練習テンプレート:メッセージを変えて遊ぶ
- Day 12 ミニ課題のまとめ
Day 12 のゴールと全体イメージ
Day 12 では、「繰り返し処理」のもう一つの重要な構文である while 文 と do while 文 を学びます。 Day 11 の for 文は「回数が決まっている繰り返し」に向いていましたが、 while 文は「条件が満たされている間ずっと続ける」というスタイルの繰り返しに向いています。
学ぶことは次のとおりです。
- while 文
- do while 文
- 無限ループ(終わらないループ)
これらをステップバイステップでかみ砕きながら、初心者の方でも自然に使えるようになることを目指します。
while 文の基本構造
「条件が true の間、繰り返す」
while 文は、
「ある条件が true の間、同じ処理を繰り返す」
ための構文です。基本形は次のようになります。
while (条件)
{
// 繰り返したい処理
}
C#ここでのポイントは、
- 条件が
trueの間は、何度でも繰り返す - 条件が
falseになった瞬間に、ループを抜ける - 条件がずっと
trueのままだと、ループが終わらない(無限ループ)
ということです。
具体例1:1〜10 を while 文で表示する
for 文との違いを意識しながら書いてみる
Day 11 では、1〜10 を for 文で表示しました。 同じことを while 文で書いてみると、次のようになります。
using System;
class Program
{
static void Main(string[] args)
{
int i = 1; // カウンター変数。最初は 1 からスタートします。
// i が 10 以下の間、繰り返します
while (i <= 10)
{
Console.WriteLine(i); // 現在の i の値を表示します
i++; // i を 1 つ増やします(更新)
}
Console.ReadLine();
}
}
C#重要ポイント:
- for 文では「初期化・条件・更新」が一行にまとまっていましたが、 while 文では「初期化」と「更新」をループの外と中に分けて書きます。
- 条件(ここでは
i <= 10)がfalseになると、ループを抜けます。
while 文の設計で大事なこと
「初期化」「条件」「更新」の3つを必ずセットで考える
while 文を書くときに大事なのは、
- 初期化:ループに入る前に、カウンターや状態を準備する
- 条件:ループを続けるかどうかを決める
- 更新:ループの中で、状態を変えていく
という3つをセットで考えることです。
もし「更新」を書き忘れると、条件がずっと変わらず、 結果として 無限ループ になってしまうことがあります。
具体例2:ユーザー入力で繰り返しを続ける
「終了と入力されるまで繰り返す」
while 文の強みは、「回数が決まっていない繰り返し」に向いていることです。 例えば、次のような仕様を考えてみます。
「ユーザーが ‘exit’ と入力するまで、メッセージを表示し続ける。」
これを while 文で書くと、次のようになります。
using System;
class Program
{
static void Main(string[] args)
{
string command = ""; // ユーザーの入力を入れる変数
// command が "exit" でない間、繰り返します
while (command != "exit")
{
Console.WriteLine("何か入力してください(終了するには exit と入力):");
command = Console.ReadLine(); // 毎回新しい入力を受け取ります
Console.WriteLine($"あなたが入力した文字列:{command}");
}
Console.WriteLine("プログラムを終了します。");
Console.ReadLine();
}
}
C#重要ポイント:
- 条件は
command != "exit"なので、commandが"exit"になるまで繰り返します。 - ループの中で
command = Console.ReadLine();を行うことで、 毎回条件に使う値が更新されます。 - 「いつ終わるか分からない繰り返し」に while 文は向いています。
do while 文の基本構造
「最低1回は必ず実行される」ループ
do while 文は、while 文と似ていますが、
「最低1回は必ず実行される」
という特徴があります。基本形は次のとおりです。
do
{
// 繰り返したい処理
}
while (条件);
C#ここでのポイントは、
- まず
do { ... }の中身が 1回実行される - その後で
while (条件)が評価され、trueならもう一度実行される - 条件が
falseになったら、そこでループ終了
という流れになることです。
具体例3:メニューを最低1回は表示する
「一度は必ず聞きたい」場面で使う
do while 文の典型的な使い方として、 「メニューを最低1回は表示して、ユーザーに選んでもらう」という例を見てみます。
using System;
class Program
{
static void Main(string[] args)
{
int menu;
// 少なくとも 1 回はメニューを表示して、選んでもらいます
do
{
Console.WriteLine("=== メニュー ===");
Console.WriteLine("1: 挨拶");
Console.WriteLine("2: 今日の日付を表示");
Console.WriteLine("0: 終了");
Console.WriteLine("番号を入力してください:");
string input = Console.ReadLine();
menu = int.Parse(input);
if (menu == 1)
{
Console.WriteLine("こんにちは!");
}
else if (menu == 2)
{
Console.WriteLine($"今日の日付:{DateTime.Now.ToShortDateString()}");
}
else if (menu == 0)
{
Console.WriteLine("終了します。");
}
else
{
Console.WriteLine("不正な番号です。0〜2 を入力してください。");
}
Console.WriteLine(); // 空行で見やすくします
} while (menu != 0); // menu が 0 でない間、もう一度メニューを表示します
Console.ReadLine();
}
}
C#重要ポイント:
- do while 文では、「処理 → 条件チェック」の順番になります。
- メニューのように「一度は必ず表示したい」場面に向いています。
- 条件(ここでは
menu != 0)がfalseになると、ループを抜けます。
無限ループとは何か
「終わりの条件がない」または「条件が変わらない」ループ
無限ループとは、
「ずっと終わらずに繰り返し続けるループ」
のことです。
典型的な書き方は次のようになります。
while (true)
{
// ずっと繰り返される処理
}
C#この場合、条件が常に true なので、 プログラムを強制終了しない限り、ループは終わりません。
注意点:
- 無限ループは、意図的に使う場合もあります(ゲームのメインループなど)。
- しかし、意図せず無限ループになってしまうと、 CPU を使い続けてしまい、プログラムが固まったように見えることがあります。
具体例4:意図的な無限ループ + break で抜ける
「ずっと待ち続けるが、条件を満たしたら抜ける」
無限ループを安全に使うためには、 ループの中で break を使って「抜ける条件」を用意することが大切です。
using System;
class Program
{
static void Main(string[] args)
{
while (true) // 無限ループ
{
Console.WriteLine("コマンドを入力してください(exit で終了):");
string command = Console.ReadLine();
if (command == "exit")
{
Console.WriteLine("終了コマンドが入力されたので、ループを抜けます。");
break; // while ループを抜けます
}
Console.WriteLine($"入力されたコマンド:{command}");
Console.WriteLine();
}
Console.WriteLine("プログラムを終了しました。");
Console.ReadLine();
}
}
C#重要ポイント:
while (true)で「ずっと待ち続ける」ループを作り、if (command == "exit") { break; }で「抜ける条件」を用意しています。- 無限ループを使うときは、必ず「抜けるための条件と break」をセットで考えることが重要です。
無限ループになってしまう典型的なミス
更新を忘れる / 条件が変わらない
初心者の方が while 文でよくやってしまうミスは、
- カウンターや状態の 更新を忘れる
- 条件に使っている変数が ループの中で変化していない
というものです。
例えば、次のコードは危険です。
int i = 1;
while (i <= 10)
{
Console.WriteLine(i);
// i++ を書き忘れている!
}
C#この場合、i はずっと 1 のままなので、 i <= 10 は永遠に true のままになり、無限ループになります。
対策:
- while 文を書くときは、「初期化」「条件」「更新」の3つを必ずセットで確認する。
- ループの中で、条件に関係する変数がちゃんと変化しているかを意識する。
Day 12 のまとめ
Day 12 では、繰り返し構文のもう一つの柱である while 文 と do while 文 を学びました。
- while 文
- 条件が
trueの間、処理を繰り返す - 回数が決まっていない繰り返しに向いている
- 「初期化」「条件」「更新」をセットで考えることが重要
- 条件が
- do while 文
- 少なくとも 1 回は必ず処理が実行される
- 「一度は必ず聞きたい」場面(メニュー表示など)に向いている
- 無限ループ
- 条件がずっと
trueのままのループ - 意図的に使う場合もあるが、必ず「抜ける条件」と
breakをセットで考える
- 条件がずっと
Day 11 の for 文と Day 12 の while 文・do while 文を組み合わせることで、 「回数が決まっている繰り返し」と「条件に応じて続く繰り返し」の両方を扱えるようになります。
ぜひ、
- for 文で書いた処理を while 文に書き換えてみる
- ユーザー入力に応じて続くループを作ってみる
- 無限ループ + break のパターンを安全に試してみる
といった練習を通して、「状況に応じて最適な繰り返し構文を選ぶ感覚」を育てていってください。
Day 12 ミニ課題のゴール
Day 12 のミニ課題では、「ユーザーが『終了』と入力するまで繰り返すプログラム」を題材にして、
- while
- do while
- 無限ループ(と、その安全な抜け方)
を実践的に身につけていきます。 「いつ終わるか分からない繰り返し」を扱うので、while 文の本領発揮の場面です。
仕様を日本語で整理する
まずは、プログラムの動きを日本語で整理します。
- ユーザーに文字列を入力してもらう。
- 入力された文字列を表示する。
- 入力が「終了」だったら、ループを終えてプログラムを終了する。
- 「終了」以外なら、また 1 に戻って繰り返す。
この「日本語の仕様」を、そのまま while 文に落とし込んでいきます。
while 版:条件でループを続ける
ステップ1:状態を表す変数を用意する
「終了かどうか」を判定するために、ユーザー入力を保持する変数を用意します。
string input = ""; // ユーザーの入力を入れる変数。最初は空文字にしておきます。
C#ステップ2:条件を決める
仕様では「ユーザーが『終了』と入力するまで繰り返す」ので、 条件は次のようになります。
「input が ‘終了’ でない間、繰り返す」
つまり、input != "終了" です。
ステップ3:コード全体を書く
using System;
class Program
{
static void Main(string[] args)
{
string input = ""; // ユーザーの入力を保持する変数
// input が "終了" でない間、繰り返します
while (input != "終了")
{
Console.WriteLine("文字を入力してください(終了するには「終了」と入力):");
input = Console.ReadLine(); // 毎回新しい入力を受け取ります
Console.WriteLine($"あなたが入力した文字列:{input}");
Console.WriteLine(); // 空行で見やすくします
}
Console.WriteLine("「終了」と入力されたので、プログラムを終了します。");
Console.ReadLine();
}
}
C#重要ポイント:
- 条件は
input != "終了"なので、「終了」以外の間はずっと繰り返します。 - ループの中で
input = Console.ReadLine();を行うことで、 条件に使う値が毎回更新されます。 - 「いつ終わるか分からない繰り返し」に while 文は向いています。
do while 版:最低1回は必ず実行する
「一度は必ず入力してもらう」場面に向いている
do while 文は、
「最低1回は必ず処理を実行してから、条件をチェックする」
という特徴があります。 今回のミニ課題にも、do while で書いたバージョンを作ってみます。
コード例:do while で「終了」まで繰り返す
using System;
class Program
{
static void Main(string[] args)
{
string input; // ユーザーの入力を保持する変数
// 少なくとも 1 回は必ず入力してもらいます
do
{
Console.WriteLine("文字を入力してください(終了するには「終了」と入力):");
input = Console.ReadLine(); // 入力を受け取ります
Console.WriteLine($"あなたが入力した文字列:{input}");
Console.WriteLine(); // 空行で見やすくします
} while (input != "終了"); // input が "終了" でない間、もう一度繰り返します
Console.WriteLine("「終了」と入力されたので、プログラムを終了します。");
Console.ReadLine();
}
}
C#重要ポイント:
- do while 文では、「処理 → 条件チェック」の順番になります。
- そのため、「一度は必ず入力してもらう」場面に向いています。
- 条件は while 版と同じく
input != "終了"です。
無限ループ版:while(true) + break で抜ける
意図的な無限ループと安全な抜け方
もう一つの書き方として、無限ループ + break のパターンもよく使われます。
「ずっと入力を受け付けるが、『終了』と入力されたら break で抜ける」
というイメージです。
コード例:while(true) を使ったバージョン
using System;
class Program
{
static void Main(string[] args)
{
while (true) // 無限ループ。条件は常に true です。
{
Console.WriteLine("文字を入力してください(終了するには「終了」と入力):");
string input = Console.ReadLine();
if (input == "終了")
{
Console.WriteLine("「終了」と入力されたので、ループを抜けます。");
break; // while ループを抜けます
}
Console.WriteLine($"あなたが入力した文字列:{input}");
Console.WriteLine(); // 空行で見やすくします
}
Console.WriteLine("プログラムを終了しました。");
Console.ReadLine();
}
}
C#重要ポイント:
while (true)は「ずっと続くループ」ですが、if (input == "終了") { break; }で「抜ける条件」を用意しています。- 無限ループを使うときは、必ず break で抜けるための条件 をセットで考えることが重要です。
3パターンの違いを整理する
while / do while / 無限ループ + break
同じ「終了と入力されるまで繰り返す」でも、書き方によって特徴が少し変わります。
- while 版
- 条件を先にチェックしてから、ループに入る。
- 初期値によっては、1 回も実行されない可能性がある。
- do while 版
- 必ず 1 回は実行してから、条件をチェックする。
- 「一度は必ず入力してもらう」場面に向いている。
- while(true) + break 版
- 条件は常に true で、ループの中で「抜ける条件」を判定する。
- メインループやコマンド受付などでよく使われるパターン。
初心者の方は、まずは while 版 をしっかり理解し、 そのあとで do while 版 と 無限ループ版 を「書き方のバリエーション」として押さえておくと、 状況に応じて自然に選べるようになっていきます。
練習テンプレート:メッセージを変えて遊ぶ
このミニ課題のコードは、少しアレンジするだけでいろいろな練習に使えます。
- 「終了」ではなく
"exit"や"quit"に変えてみる。 - 入力された文字列を、
ToUpper()やLengthで加工して表示してみる。 - 「終了」以外のときに、カウンターを増やして「何回入力したか」を表示してみる。
例えば、入力回数を数える while 版は次のようになります。
using System;
class Program
{
static void Main(string[] args)
{
string input = "";
int count = 0; // 入力回数を数えるカウンター
while (input != "終了")
{
Console.WriteLine("文字を入力してください(終了するには「終了」と入力):");
input = Console.ReadLine();
count++; // 入力回数を 1 増やします
Console.WriteLine($"[{count} 回目] あなたが入力した文字列:{input}");
Console.WriteLine();
}
Console.WriteLine($"合計 {count} 回入力されました。プログラムを終了します。");
Console.ReadLine();
}
}
C#Day 12 ミニ課題のまとめ
このミニ課題では、
- while 文で「終了と入力されるまで繰り返す」
- do while 文で「最低1回は必ず入力してもらう」
- 無限ループ + break で「ずっと待ちつつ、条件で抜ける」
という3つの書き方を通して、
- 条件に応じて続く繰り返し
- 「いつ終わるか分からないループ」の設計
- 無限ループとその安全な抜け方
を体験しました。
Day 11 の for 文と Day 12 の while / do while を組み合わせることで、 「回数が決まっている繰り返し」と「条件に応じて続く繰り返し」の両方を扱えるようになります。
ぜひ、
- 条件やキーワードを変えて、いろいろな「終了条件付きループ」を作ってみる
- 入力回数や履歴を記録するなど、少しずつ機能を足してみる
- while / do while / 無限ループ + break の違いを意識しながら書き分けてみる
といった練習を通して、「繰り返し構文を自分の意図通りにコントロールする感覚」を育てていってください。
