閉じる

C#のConsole.ReadLineでキーボード入力を受け取る基本

コンソールアプリでユーザーから文字を受け取るための最も基本的な方法がConsole.ReadLineです。

初心者の方がつまずきやすいポイントは、Enterで確定する仕組みや、空行と終端入力で戻り値がどう変化するかです。

この記事ではConsole.ReadLineの基本と実践的な使い方を、丁寧なサンプルコードとともに解説します。

C# Console.ReadLineの基本

Console.ReadLineとは

基本の説明

Console.ReadLineは、キーボードから1行の文字列を読み取り、その文字列を戻り値として返すメソッドです。

戻り値の型はstringで、ユーザーがEnterを押すまで入力待ちになります。

読み取られるのは1行単位で、行末の改行は含まれません。

最小コード例

C#
// Console.ReadLineの最小例
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("あなたの名前を入力してください:");
        string name = Console.ReadLine(); // ユーザーがEnterを押すまで待つ
        Console.WriteLine($"こんにちは、{name}さん!");
    }
}
実行結果
あなたの名前を入力してください:
Taro
こんにちは、Taroさん!

キーボード入力の流れ

流れの理解

入力の基本的な流れは次の通りです。

プロンプト(案内メッセージ)を表示し、ユーザーが文字をタイプし、Enterで確定します。

その後Console.ReadLineが文字列を返します。

ここで返る文字列には行末の改行が含まれません。

ちょっとしたコツ

ユーザーが安心できるように、読み取り前にわかりやすいプロンプトを出すことが大切です。

プロンプトがないと、プログラムが止まっているように見えてしまいます。

Enterで確定する

Enterキーの役割

Enterキーは「1行の入力を確定する」操作です。

何も入力せずにEnterを押すと、戻り値は空文字("")になります。

入力は終了しますが、nullにはなりません。

確認コード

C#
// Enterで確定し、空行は空文字になることを確認
using System;

class Program
{
    static void Main()
    {
        Console.Write("何か入力してEnter(空でも可): ");
        string line = Console.ReadLine();

        if (line == "")
        {
            Console.WriteLine("空文字が入力されました。");
        }
        else
        {
            Console.WriteLine($"入力は「{line}」です。");
        }
    }
}
実行結果
何か入力してEnter(空でも可): 
空文字が入力されました。

戻り値と改行の扱い

改行は含まれない

Console.ReadLineは、行末の改行(Windowsでは\r\n)を取り除いた文字列を返します

そのため、戻り値の末尾に改行は含まれません。

改行を出力したい場合はConsole.WriteLineで行い、改行を出したくない場合はConsole.Writeを使います。

動作イメージのコード

C#
// 改行の扱いを確認する例
using System;

class Program
{
    static void Main()
    {
        Console.Write("都市名を入力してください: "); // 改行しない
        string city = Console.ReadLine(); // 改行(\r\n)は含まれず、"Tokyo"などのみ入る
        Console.WriteLine($"あなたの入力は「{city}」です。"); // ここで改行が付く
    }
}
実行結果
都市名を入力してください: Tokyo
あなたの入力は「Tokyo」です。

Console.ReadLineのプロンプト表示と入力パターン

質問を表示してから読む

分かりやすい尋ね方

まず質問をConsole.WriteLineで表示してからConsole.ReadLineで読むと、ユーザーは何を入力すればよいか理解しやすくなります。

C#
// 質問を先に表示してから読むパターン
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("年齢を入力してください:");
        string ageText = Console.ReadLine(); // ここで入力待ち
        Console.WriteLine($"入力された年齢は「{ageText}」です。");
    }
}
実行結果
年齢を入力してください:
18
入力された年齢は「18」です。

同じ行でプロンプトを出す

コンパクトなプロンプト

同じ行で入力させたいときはConsole.Writeを使います。

最後にスペースやコロンを入れて、入力位置を分かりやすくします。

C#
// 同じ行でプロンプトを出すパターン
using System;

class Program
{
    static void Main()
    {
        Console.Write("好きな言語は? "); // 同じ行で聞く
        string language = Console.ReadLine();
        Console.WriteLine($"あなたは「{language}」が好きなのですね。");
    }
}
実行結果
好きな言語は? C#
あなたは「C#」が好きなのですね。

複数回の入力を読む

ループで何度も読む

繰り返し読みたい場合は、whileループでConsole.ReadLineを呼び続けます

終了コマンド(例: exit)や終端入力(null)を条件に抜けるようにします。

C#
// 複数回の入力を読み、"exit" または終端入力で終了する例
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("メモを入力してください。終了するには「exit」と入力するか、Ctrl+Z(Windows)/Ctrl+D(macOS/Linux)で終端にします。");

        while (true)
        {
            Console.Write("> "); // 入力プロンプト
            string line = Console.ReadLine();

            // 終端入力(null)なら終了
            if (line == null)
            {
                Console.WriteLine("終端が入力されました。終了します。");
                break;
            }

            // "exit"で終了(大文字小文字は区別しない)
            if (line.Equals("exit", StringComparison.OrdinalIgnoreCase))
            {
                Console.WriteLine("exitが入力されました。終了します。");
                break;
            }

            Console.WriteLine($"メモ: {line}");
        }
    }
}
実行結果
メモを入力してください。終了するには「exit」と入力するか、Ctrl+Z(Windows)/Ctrl+D(macOS/Linux)で終端にします。
> 買い物リスト
メモ: 買い物リスト
> exit
exitが入力されました。終了します。

Console.ReadLineの空文字とnull

空行は空文字になる

空行の扱い

何も入力せずにEnterを押した場合、戻り値は空文字("")です。

nullではありません。

この区別は入力検証で重要です。

C#
// 空行(空文字)を識別する
using System;

class Program
{
    static void Main()
    {
        Console.Write("任意の文字を入力(空行可): ");
        string s = Console.ReadLine();

        if (s == "")
        {
            Console.WriteLine("空文字が返されました(Enterのみ)。");
        }
        else
        {
            Console.WriteLine($"受け取った文字: 「{s}」");
        }
    }
}
実行結果
任意の文字を入力(空行可): 
空文字が返されました(Enterのみ)。

終端入力はnullになる(Ctrl+Z)

末尾(EOF)の扱い

入力の終端(EOF)が送られるとConsole.ReadLineはnullを返します

これはファイルの終端と同じ概念です。

コンソールでは次の操作でEOFを送れます。

  • Windows: Ctrl+Zを押してからEnter
  • macOS/Linux: Ctrl+D(Enterは不要)

空行の空文字とは別物なので、nullチェックを忘れずに行います。

C#
// 終端入力(null)を検出する例
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("何か入力してください。終端を送ると終了します。");
        string line = Console.ReadLine();

        if (line == null)
        {
            Console.WriteLine("nullが返りました(終端が入力されました)。");
        }
        else
        {
            Console.WriteLine($"入力は「{line}」です。");
        }
    }
}
実行結果
何か入力してください。終端を送ると終了します。
^Z
nullが返りました(終端が入力されました)。

nullチェックの基本

安全な確認方法

nullは例外の原因になりやすいので、まずnullかどうかを確認してから処理します。

判定は== nullでも、パターンマッチングのis nullでも構いません。

C#
// nullを先に判定し、その後に空文字や実データを判定する流れ
using System;

class Program
{
    static void Main()
    {
        Console.Write("入力してください(終端で終了): ");
        string line = Console.ReadLine();

        if (line is null) // まずはnull判定
        {
            Console.WriteLine("終端検出: プログラムを終了します。");
            return;
        }

        if (line == "") // 次に空文字判定
        {
            Console.WriteLine("空文字でした。");
            return;
        }

        Console.WriteLine($"受信: 「{line}」");
    }
}
実行結果
入力してください(終端で終了): 
空文字でした。

空文字とnullの違いを小さな表で整理します。

状況Console.ReadLineの戻り値
何も入力せずEnter空文字(“”)
終端入力(EOF)null

Console.ReadLineのコツと注意点

入力を確認してエコー表示

なぜエコーが有効か

受け取った入力を確認表示(エコー)すると、ユーザーもプログラムも間違いに気づきやすくなります

特にループ処理では有効です。

C#
// 入力内容をエコーして確認する
using System;

class Program
{
    static void Main()
    {
        Console.Write("商品名: ");
        string name = Console.ReadLine();
        Console.WriteLine($"入力確認: 「{name}」");
    }
}
実行結果
商品名: Pen
入力確認: 「Pen」

前後の空白をTrimする

余計な空白の除去

ユーザーはうっかり前後に空白を入れがちです。

前後の空白はTrimで取り除いてから判定や保存をすると実務的です。

C#
// Trimで前後の空白を除去してから使う
using System;

class Program
{
    static void Main()
    {
        Console.Write("ユーザーIDを入力: ");
        string raw = Console.ReadLine();

        if (raw is null)
        {
            Console.WriteLine("終端が入力されました。終了します。");
            return;
        }

        string id = raw.Trim(); // 前後の空白を除去

        if (id == "")
        {
            Console.WriteLine("空のIDは無効です。");
        }
        else
        {
            Console.WriteLine($"登録ID: 「{id}」");
        }
    }
}
実行結果
ユーザーIDを入力:   alice  
登録ID: 「alice」

空入力なら再入力を促す

再入力の基本パターン

空文字を許可しない場合は、空のときに再入力を促すループを作ります。

null(終端)には丁寧に対応して終了します。

C#
// 空文字なら再入力を促し、nullなら終了する入力ループ
using System;

class Program
{
    static void Main()
    {
        string name;

        while (true)
        {
            Console.Write("お名前を入力してください: ");
            string input = Console.ReadLine();

            if (input is null)
            {
                Console.WriteLine("終端が入力されました。登録を中止します。");
                return;
            }

            name = input.Trim();

            if (name == "")
            {
                Console.WriteLine("空では登録できません。もう一度入力してください。");
                continue; // 再入力
            }

            // 妥当な入力を受け取ったらループを抜ける
            break;
        }

        Console.WriteLine($"ようこそ、{name}さん!");
    }
}
実行結果
お名前を入力してください: 
空では登録できません。もう一度入力してください。
お名前を入力してください:   Hanako  
ようこそ、Hanakoさん!
補足

macOS/Linuxでは終端入力はCtrl+D、WindowsではCtrl+Zの後にEnterが必要です。

ただし、Visual Studio Codeのターミナルなど一部の環境では、Windowsであっても終端入力がCtrl+Dの場合があります。

実行環境に応じて案内メッセージを用意すると親切です。

まとめ

Console.ReadLineは「1行読み、改行を除いた文字列を返す」非常に基本的で強力なメソッドです。

プロンプトの出し方(同じ行か別行か)、空文字とnullの違い、Enterで確定する動作を理解すれば、入力まわりの多くの混乱は避けられます。

実務ではTrimで余計な空白を取り除き、空入力時には再入力を促し、終端(null)には穏やかに終了するという定番パターンを実装します。

まずは本記事のパターンをそのまま写経し、次に自分の要件に合わせてメッセージや判定条件を調整してみてください。

この記事を書いた人
エーテリア編集部
エーテリア編集部

C#の入門記事を中心に、開発環境の準備からオブジェクト指向の基本まで、順を追って解説しています。ゲーム開発や業務アプリを目指す人にも役立ちます。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!