閉じる

【C#】Console.ReadLine入門|文字列・数値入力の扱い方

C#でコンソールアプリを作るとき、ユーザーからの入力を受け取る基本がConsole.ReadLineです。

本記事では、文字列入力から数値入力、エラー対策や便利な読み取りパターンまで、初心者の方でも実践できる形で詳しく解説します。

サンプルコードも豊富に載せていますので、ぜひ手を動かしながら読み進めてみてください。

【C#】Console.ReadLine入門|文字列・数値入力の扱い方

Console.ReadLineとは何か

Console.ReadLineは、コンソール画面から1行ぶんの文字列を読み取るメソッドです。

ユーザーがキーボードで文字を入力し、Enterキーを押したタイミングで、入力された1行分のテキストがstring型として返ってきます。

コンソールアプリでは、ユーザーとの対話はほぼこのConsole.ReadLineを中心に構成されます。

入力を受けて処理を変えたり、数値計算に使ったりすることで、動きのあるアプリケーションを作ることができます。

基本の使い方(文字列の読み取り)

最もシンプルなパターン

もっとも基本的な例として、名前を入力してもらい、そのまま表示するプログラムを見てみます。

C#
using System;

class Program
{
    static void Main()
    {
        // ユーザーに入力をうながすメッセージを表示
        Console.Write("あなたの名前を入力してください: ");

        // Console.ReadLineで1行ぶんの入力を受け取り、nameという変数に代入
        string name = Console.ReadLine();

        // 入力された内容を表示
        Console.WriteLine("こんにちは、" + name + "さん!");
    }
}

上の例では、ユーザーが何を入力しても、その文字列がnameとしてそのまま使われます。

Console.ReadLineは戻り値がstring型であることがポイントです。

Console.WriteとConsole.WriteLineの違い

入力前のメッセージを表示するとき、Console.Writeを使うかConsole.WriteLineを使うかで見た目が変わります。

  • Console.Write
    改行しないでメッセージを表示します。入力欄を同じ行に置きたいときに使います。
  • Console.WriteLine
    メッセージを表示したあとで改行します。次の行から入力を受けたいときに使います。

入力を促すメッセージの場合は、同じ行に入力欄があった方が分かりやすいので、Console.Writeを使うことが多いです。

数値入力を扱う方法

文字列として読み取ったデータを、そのまま数値計算に使うことはできません。

Console.ReadLineが返すのは必ずstring型なので、数値として扱うには型変換が必要です。

int.Parseで整数に変換する

もっともシンプルな変換方法はint.Parseです。

C#
using System;

class Program
{
    static void Main()
    {
        Console.Write("年齢を入力してください: ");

        // 入力を文字列として受け取る
        string input = Console.ReadLine();

        // 文字列をint型に変換する
        int age = int.Parse(input);

        Console.WriteLine("あなたは" + age + "歳ですね。");
    }
}
実行結果
年齢を入力してください: 25
あなたは25歳ですね。

ただし、数字以外が入力された場合、int.Parseは例外を投げてプログラムがエラー終了してしまいます。

後ほど説明するint.TryParseを使うことで、この問題に対処できます。

double.Parseで小数を扱う

小数を含む数値を扱いたい場合はdouble.Parseなどの浮動小数点型を使います。

C#
using System;

class Program
{
    static void Main()
    {
        Console.Write("身長(cm)を入力してください: ");

        string input = Console.ReadLine();

        // 小数も扱えるdouble型に変換
        double height = double.Parse(input);

        Console.WriteLine("あなたの身長は " + height + " cm ですね。");
    }
}

注意点として、実行環境のカルチャ(ロケール)によって小数点記号が「.」か「,」かが変わる場合があります。

日本語環境では通常「.」になります。

安全な数値入力: TryParseパターン

TryParseの基本形

ユーザーがいつも正しい形式で数字を入力してくれるとは限りません。

そこで使われるのがTryParseメソッドです。

int.TryParseの基本形は以下のようになります。

C#
bool 成功したかどうか = int.TryParse(文字列, out 変換後の値);

成功した場合はtrueになり、失敗した場合はfalseになります。

例外は発生しないので、プログラムが落ちる心配がないことが大きなメリットです。

入力が正しいかチェックしながら読み取る

以下は、整数の入力を安全に受け取り、誤った入力なら再入力を求めるサンプルです。

C#
using System;

class Program
{
    static void Main()
    {
        int age;                    // ここに変換結果が入る
        bool isValid = false;       // 入力が有効かどうかを示すフラグ

        while (!isValid)
        {
            Console.Write("年齢を整数で入力してください: ");
            string input = Console.ReadLine();

            // TryParseで変換を試みる
            if (int.TryParse(input, out age))
            {
                // 成功したらフラグをtrueにしてループを抜ける
                isValid = true;
            }
            else
            {
                // 失敗したらエラーメッセージを表示し、再入力を促す
                Console.WriteLine("数字のみで入力してください。例: 20");
            }
        }

        Console.WriteLine("入力された年齢は " + age + " 歳です。");
    }
}
実行結果
年齢を整数で入力してください: abc
数字のみで入力してください。例: 20
年齢を整数で入力してください: 30
入力された年齢は 30 歳です。

このパターンを覚えておくと、ユーザー入力を前提とするプログラムの安定性が大きく向上します。

複数の値を1行で入力する

スペース区切りで読み取り、Splitする

Console.ReadLineは1行を丸ごと文字列として受け取るので、1行の中に複数の値を入力させることも可能です。

よく使われるのは、スペースで区切って入力してもらい、それを分割する方法です。

C#
using System;

class Program
{
    static void Main()
    {
        Console.Write("2つの整数をスペース区切りで入力してください (例: 10 20): ");

        // 例: "10 20" のような文字列が入る
        string line = Console.ReadLine();

        // スペースで分割して配列にする
        string[] parts = line.Split(' ');

        // 配列の0番目と1番目を整数に変換
        int a = int.Parse(parts[0]);
        int b = int.Parse(parts[1]);

        Console.WriteLine("1つ目の値: " + a);
        Console.WriteLine("2つ目の値: " + b);
        Console.WriteLine("合計: " + (a + b));
    }
}
実行結果
2つの整数をスペース区切りで入力してください (例: 10 20): 15 27
1つ目の値: 15
2つ目の値: 27
合計: 42

このパターンは、配列処理や簡単な競技プログラミング風の問題に取り組む際にもよく使われます。

SplitとTryParseを組み合わせる

複数の値を扱う場合も、入力ミスは起こりがちです。

Splitで分解したあと、各要素に対してTryParseを使うと、より堅牢なコードになります。

C#
using System;

class Program
{
    static void Main()
    {
        Console.Write("2つの整数をスペース区切りで入力してください (例: 10 20): ");
        string line = Console.ReadLine();
        string[] parts = line.Split(' ');

        if (parts.Length != 2)
        {
            Console.WriteLine("ちょうど2つの値を入力してください。");
            return;
        }

        if (int.TryParse(parts[0], out int a) && int.TryParse(parts[1], out int b))
        {
            Console.WriteLine("入力OK: " + a + " と " + b);
        }
        else
        {
            Console.WriteLine("整数として解釈できませんでした。数字のみを入力してください。");
        }
    }
}

ReadLineとnull(終端)の扱い

Console.ReadLineがnullを返すケース

通常のコンソール実行ではあまり意識しませんが、Console.ReadLine入力ストリームが終端(EOF)に達した場合、nullを返す仕様になっています。

たとえば、ファイルリダイレクト(例: myapp.exe < input.txt)で実行している場合、ファイルの終端まで読み終えると、その次のReadLineはnullになります。

nullを考慮した基本パターン

EOFを考慮したい場合、以下のようにnullチェックを挟むのが安全です。

C#
using System;

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

        if (line == null)
        {
            Console.WriteLine("入力が終了しました。");
        }
        else
        {
            Console.WriteLine("入力された文字列: " + line);
        }
    }
}

通常の学習段階ではnullはあまり出てきませんが、「ReadLineは必ずstringを返す」と思い込まないことが、後々の応用で役に立ちます。

Console.ReadLineを使うときのよくある疑問

「Enterキーを押さずに1文字だけ読みたい」

Console.ReadLineはあくまで「1行単位」での入力です。

1文字だけを即座に読み取りたい場合はConsole.ReadKey()を使います。

C#
using System;

class Program
{
    static void Main()
    {
        Console.Write("何か1文字入力してください: ");

        // Enterを待たずに1文字を取得
        ConsoleKeyInfo keyInfo = Console.ReadKey();

        Console.WriteLine(); // 改行
        Console.WriteLine("あなたが押したキー: " + keyInfo.KeyChar);
    }
}

行単位ならReadLine、キー単位ならReadKeyという整理で覚えておくと良いです。

入力をトリムしたい(前後の空白を消す)

ユーザーがスペースを入れてしまうこともあります。

先頭や末尾の空白文字を無視したいときはTrim()メソッドを組み合わせます。

C#
string input = Console.ReadLine();

// 前後の空白を取り除く
string trimmed = input.Trim();

数値変換の前にTrimを挟んでおくと、うっかり打ち込まれた空白のせいでエラーになるといった問題を避けられます。

入力パターン早見表

以下に代表的なパターンを一覧にまとめます。

入力の目的とよく使う書き方を対応させておくことで、どの場面で何を使えば良いのか整理しやすくなります。

目的代表的なコード例説明
文字列入力string s = Console.ReadLine();1行を文字列としてそのまま利用
整数入力(単純)int n = int.Parse(Console.ReadLine());入力が必ず数字と分かっている場合向け
整数入力(安全)int.TryParse(Console.ReadLine(), out int n);入力ミスに強い。成功判定が必要
小数入力double d = double.Parse(Console.ReadLine());小数を含む数値に対応
スペース区切り2値var parts = Console.ReadLine().Split(' ');parts[0], parts[1]などにアクセス
1文字入力var k = Console.ReadKey();Enter不要で単一キーを取得
EOF判定string? line = Console.ReadLine();lineがnullなら入力終了

まとめ

Console.ReadLineは、C#のコンソールアプリにおけるユーザー入力の中核となるメソッドです。

基本はstringとして1行を受け取り、必要に応じてint.Parseint.TryParseなどで数値に変換します。

スペース区切りで複数値を入力したり、TrimやSplitと組み合わせることで、柔軟な入力処理が可能になります。

まずは本記事のサンプルを写経しながら、文字列入力・数値入力・安全なTryParseパターンの3つをしっかり身につけておくと、以降の学習がスムーズになります。

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

URLをコピーしました!