【C#入門】while文で「正しい入力が来るまで繰り返す」仕組みを理解する

はじめに

プログラムを作っていると、

  • ユーザーが変な値を入力する
  • 想定外の値が入る
  • 処理が壊れる

ということが頻繁に起きます。

そこで重要になるのが

入力チェック(バリデーション)

です。

今回は教科書に出てくる次のコードを題材に、

while文の実践的な使い方を理解していきます。


サンプルコード

var num = 0;

while (num <= 0 || 5 <= num)
{
    Console.WriteLine("1、2、3、4のいずれかを入力してください。");
    var line = Console.ReadLine();
    num = int.Parse(line);
}

Console.WriteLine($"{num}が入力されました。");

このプログラムは何をしている?

一言でいうと

正しい数字が入力されるまで聞き続ける

プログラムです。


ステップで理解する

① 初期値

var num = 0;

まず num に 0 を入れます。


② while の条件

num <= 0 || 5 <= num

これを日本語にすると

num が0以下 または 5以上 の間は繰り返す

つまり

範囲外なら繰り返す

という意味です。


数直線で考える

許可されているのは

1~4

だけです。

それ以外なら再入力になります。


なぜこの条件を書くのか

初心者がよく思う疑問:

「1〜4ならOK」って書けばよくない?

つまり

1 <= num && num <= 4

と書きたくなります。

しかし重要なポイントがあります。


while文に書くのは

続ける条件

です。

while は

  • 正しい時に入るではなく
  • 繰り返したい時に入る

構造です。


このコードの考え方

① 正しい範囲

1~4

② 間違い範囲

それ以外

③ 間違いの間は続ける

だから

num <= 0 || 5 <= num

となります。


whileを抜けた瞬間の保証

このコードの最も重要なポイント

ループ終了後

num は必ず 1~4

であることが保証されています。

これがプログラム設計で非常に重要な考え方です。

「状態を保証する」

後続の処理を安全に書けるようになります。


実務で使うなら改良が必要

このコードには1つ問題があります。

数字以外を入力すると落ちる

abc

入力すると

例外発生(クラッシュ)

します。


改良版(実務寄り)

int num;

while (true)
{
    Console.WriteLine("1、2、3、4のいずれかを入力してください。");

    if (!int.TryParse(Console.ReadLine(), out num))
    {
        Console.WriteLine("数値を入力してください");
        continue;
    }

    if (1 <= num && num <= 4)
        break;
}

Console.WriteLine($"{num}が入力されました。");

このコードで学べること

  • 例外回避
  • TryParse
  • continue
  • break
  • 無限ループ設計
  • 実務的入力検証

現場ではこちらの書き方に近くなります。


今日のまとめ

while文の本質

  • 条件が真の間繰り返す
  • 書くのは「続ける条件」
  • 終了後の状態を保証する

このサンプルの学習ポイント

  • 複合条件(OR)
  • 範囲チェック
  • 入力検証
  • 安全なプログラム設計

訪問数 15 回, 今日の訪問数 16回

C#

Posted by hidepon