【C#入門】キーボード入力の取得方法をわかりやすく解説|Console.ReadLine・キー判定・サンプルコード付き

はじめに

C#でコンソールアプリを作るとき、最初につまずきやすいのが「キーボード入力をどうやって受け取るのか」という部分です。

画面に文字を表示するだけならConsole.WriteLineでできますが、ユーザーが入力した名前や年齢、メニュー選択などを受け取るには、Console.ReadLineConsole.ReadKeyを使います。

C#のキーボード入力には、主に次のような方法があります。

C#
Console.ReadLine(); // 1行の文字列を入力する
Console.ReadKey(); // 1つのキー入力を取得する

この記事では、C#初心者向けに、キーボード入力の基本から、文字列入力、数値入力、キー判定、実践的なサンプルコードまでわかりやすく解説します。

1. C#でキーボード入力を取得する基本

1-1. C#のキーボード入力とは?コンソールアプリでできること

C#のキーボード入力とは、ユーザーがキーボードから入力した文字やキー操作をプログラムで受け取ることです。

たとえば、次のような処理ができます。

C#
Console.Write("名前を入力してください: ");
string? name = Console.ReadLine();

Console.WriteLine($"こんにちは、{name}さん!");

このプログラムでは、ユーザーが入力した名前をnameという変数に保存し、その内容を使ってメッセージを表示しています。

コンソールアプリでは、キーボード入力を使うことで、次のようなプログラムを作れます。

名前を入力して挨拶するプログラム、年齢や点数を入力して判定するプログラム、メニュー番号を選んで処理を分岐するプログラム、EnterキーやEscapeキーで終了するプログラムなどです。

1-2. 文字列入力・1キー入力・数値入力の違い

C#でキーボード入力を扱うときは、入力の種類によって使うメソッドが変わります。

文字列を入力したい場合は、Console.ReadLineを使います。これは、ユーザーが文字を入力してEnterキーを押すまで待機し、入力された内容を文字列として受け取ります。

C#
string? text = Console.ReadLine();

1つのキーだけを取得したい場合は、Console.ReadKeyを使います。これは、ユーザーが何かキーを押した瞬間に、そのキー情報を取得します。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey();

数値を入力したい場合も、最初はConsole.ReadLineで受け取ります。ただし、Console.ReadLineの戻り値は文字列なので、int.Parseint.TryParseを使って数値に変換する必要があります。

C#
string? input = Console.ReadLine();
int number = int.Parse(input);

初心者のうちは、「文字列はReadLine」「キー操作はReadKey」「数値はReadLineで受け取って変換」と覚えておくとよいでしょう。

1-3. 初心者が最初に覚えるべきConsoleクラスの役割

C#のコンソールアプリでは、Consoleクラスを使って画面への出力やキーボード入力を行います。

よく使うメソッドは次のとおりです。

C#
Console.WriteLine("文字を表示します");
Console.Write("改行せずに表示します");
Console.ReadLine();
Console.ReadKey();

Console.WriteLineは画面に文字を表示して改行します。

C#
Console.WriteLine("こんにちは");

Console.Writeは画面に文字を表示しますが、改行しません。入力を促すメッセージでよく使われます。

C#
Console.Write("名前を入力してください: ");

Console.ReadLineは、ユーザーが入力した1行分の文字列を取得します。

C#
string? name = Console.ReadLine();

Console.ReadKeyは、ユーザーが押した1つのキー情報を取得します。

C#
ConsoleKeyInfo key = Console.ReadKey();

C#のキーボード入力を学ぶときは、まずこの4つを押さえておくとスムーズです。

2. Console.ReadLineで文字列を入力する方法

2-1. Console.ReadLineの基本構文

Console.ReadLineは、ユーザーがキーボードから入力した1行分の文字列を取得するメソッドです。

基本構文は次のとおりです。

C#
string? input = Console.ReadLine();

Console.ReadLineを実行すると、プログラムはユーザーの入力を待ちます。ユーザーが文字を入力してEnterキーを押すと、その内容が文字列として返されます。

たとえば、ユーザーが「Taro」と入力してEnterキーを押すと、変数inputには"Taro"が入ります。

2-2. 入力された文字列を変数に代入するサンプルコード

次のサンプルでは、ユーザーが入力した名前を変数に代入します。

C#
using System;

class Program
{
static void Main()
{
Console.Write("名前を入力してください: ");
string? name = Console.ReadLine();

Console.WriteLine("入力が完了しました。");
}
}

Console.Writeで入力を促すメッセージを表示し、Console.ReadLineでキーボード入力を受け取っています。

string?は「文字列、またはnullの可能性がある値」を表します。最近のC#では、Console.ReadLineの戻り値がstring?として扱われるため、初心者のうちからこの形に慣れておくとよいでしょう。

2-3. 入力内容を画面に表示するサンプル

入力された文字列を使って、画面にメッセージを表示してみましょう。

C#
using System;

class Program
{
static void Main()
{
Console.Write("名前を入力してください: ");
string? name = Console.ReadLine();

Console.WriteLine($"こんにちは、{name}さん!");
}
}

実行例は次のようになります。

名前を入力してください: 佐藤
こんにちは、佐藤さん!

$"こんにちは、{name}さん!"のように書くと、文字列の中に変数の値を埋め込めます。これを文字列補間といいます。

2-4. 空文字やnullに注意するポイント

Console.ReadLineを使うときは、空文字やnullに注意が必要です。

ユーザーが何も入力せずにEnterキーを押すと、空文字""が返されます。

C#
Console.Write("名前を入力してください: ");
string? name = Console.ReadLine();

if (string.IsNullOrEmpty(name))
{
Console.WriteLine("名前が入力されていません。");
}
else
{
Console.WriteLine($"こんにちは、{name}さん!");
}

string.IsNullOrEmptyを使うと、値がnullまたは空文字かどうかをまとめて判定できます。

また、空白だけの入力も無効にしたい場合は、string.IsNullOrWhiteSpaceを使うのがおすすめです。

C#
if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("有効な名前を入力してください。");
}

初心者のうちは、ReadLineで受け取った値をそのまま使うのではなく、空文字チェックを入れる習慣をつけると安全です。

3. キーボード入力を数値として受け取る方法

3-1. ReadLineの戻り値は文字列になる

C#で数値を入力したい場合でも、Console.ReadLineの戻り値は文字列です。

たとえば、ユーザーが20と入力しても、プログラム上では最初は数値の20ではなく、文字列の"20"として扱われます。

C#
Console.Write("年齢を入力してください: ");
string? input = Console.ReadLine();

このままでは足し算や比較などの数値計算に使えません。

C#
// inputは文字列なので、そのまま数値計算には使いにくい

数値として扱いたい場合は、文字列をintdoubleなどの数値型に変換する必要があります。

3-2. int.Parseで文字列を整数に変換する方法

文字列を整数に変換するには、int.Parseを使います。

C#
string? input = Console.ReadLine();
int number = int.Parse(input);

サンプルコードを見てみましょう。

C#
using System;

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

int age = int.Parse(input);

Console.WriteLine($"あなたの年齢は{age}歳です。");
}
}

実行例は次のとおりです。

年齢を入力してください: 25
あなたの年齢は25歳です。

ただし、int.Parseには注意点があります。ユーザーが数値以外を入力すると、例外が発生してプログラムが止まってしまいます。

年齢を入力してください: abc

このような入力をすると、abcは整数に変換できないためエラーになります。

3-3. TryParseで入力エラーを防ぐ方法

入力エラーを防ぎたい場合は、int.TryParseを使うのがおすすめです。

TryParseは、変換に成功したかどうかをtrueまたはfalseで返します。

C#
string? input = Console.ReadLine();

if (int.TryParse(input, out int number))
{
Console.WriteLine($"入力された数値は{number}です。");
}
else
{
Console.WriteLine("数値を入力してください。");
}

int.TryParseを使えば、ユーザーが数値以外を入力してもプログラムが突然終了しにくくなります。

初心者向けのコンソールアプリでは、int.Parseよりもint.TryParseを使う方が安全です。

3-4. 年齢・点数・計算プログラムのサンプルコード

年齢を入力して判定するサンプルです。

C#
using System;

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

if (int.TryParse(input, out int age))
{
if (age >= 20)
{
Console.WriteLine("成人です。");
}
else
{
Console.WriteLine("未成年です。");
}
}
else
{
Console.WriteLine("年齢は数値で入力してください。");
}
}
}

次は、点数を入力して合格・不合格を判定するサンプルです。

C#
using System;

class Program
{
static void Main()
{
Console.Write("点数を入力してください: ");
string? input = Console.ReadLine();

if (int.TryParse(input, out int score))
{
if (score >= 60)
{
Console.WriteLine("合格です。");
}
else
{
Console.WriteLine("不合格です。");
}
}
else
{
Console.WriteLine("点数は数値で入力してください。");
}
}
}

最後に、2つの数値を入力して足し算するプログラムです。

C#
using System;

class Program
{
static void Main()
{
Console.Write("1つ目の数値を入力してください: ");
string? input1 = Console.ReadLine();

Console.Write("2つ目の数値を入力してください: ");
string? input2 = Console.ReadLine();

if (int.TryParse(input1, out int number1) &&
int.TryParse(input2, out int number2))
{
int result = number1 + number2;
Console.WriteLine($"計算結果: {number1} + {number2} = {result}");
}
else
{
Console.WriteLine("数値を正しく入力してください。");
}
}
}

C#でキーボード入力を数値として扱う場合は、ReadLineで文字列として受け取り、TryParseで安全に変換する流れを覚えておきましょう。

4. Console.ReadKeyで1文字・1キー入力を取得する方法

4-1. Console.ReadKeyの基本構文

Console.ReadKeyは、ユーザーが押した1つのキーを取得するメソッドです。

基本構文は次のとおりです。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey();

Console.ReadLineはEnterキーが押されるまで入力を待ちますが、Console.ReadKeyは何かキーが押された時点で入力を取得します。

たとえば、「何かキーを押したら終了する」という処理によく使われます。

C#
Console.WriteLine("何かキーを押すと終了します。");
Console.ReadKey();

4-2. 押されたキーをConsoleKeyInfoで取得する

Console.ReadKeyの戻り値は、ConsoleKeyInfo型です。

ConsoleKeyInfoには、押されたキーに関する情報が入っています。

C#
using System;

class Program
{
static void Main()
{
Console.WriteLine("何かキーを押してください。");

ConsoleKeyInfo keyInfo = Console.ReadKey();

Console.WriteLine();
Console.WriteLine($"押された文字: {keyInfo.KeyChar}");
Console.WriteLine($"押されたキー: {keyInfo.Key}");
}
}

KeyCharは、入力された文字を表します。

C#
keyInfo.KeyChar

Keyは、EnterキーやEscapeキー、矢印キーなどを判定するときに使います。

C#
keyInfo.Key

たとえば、ユーザーがAキーを押すと、KeyCharには'a'または'A'が入り、KeyにはConsoleKey.Aが入ります。

4-3. 入力したキーを画面に表示しない方法

Console.ReadKeyは、通常、押したキーを画面に表示します。

押されたキーを画面に表示したくない場合は、引数にtrueを指定します。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

サンプルコードです。

C#
using System;

class Program
{
static void Main()
{
Console.WriteLine("キーを押してください。入力内容は画面に表示されません。");

ConsoleKeyInfo keyInfo = Console.ReadKey(true);

Console.WriteLine($"押されたキー: {keyInfo.Key}");
}
}

パスワード入力やメニュー操作など、入力されたキーを画面に出したくない場面では、Console.ReadKey(true)を使います。

4-4. ReadLineとReadKeyの違い

Console.ReadLineConsole.ReadKeyは、どちらもC#でキーボード入力を取得するために使いますが、用途が異なります。

Console.ReadLineは、文字列を1行入力したいときに使います。ユーザーがEnterキーを押すまで入力が確定しません。

C#
string? name = Console.ReadLine();

一方、Console.ReadKeyは、1つのキーを押した瞬間に入力を取得したいときに使います。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey();

名前、住所、メッセージ、数値などを入力したい場合はReadLineが向いています。

Enterキー、Escapeキー、矢印キー、スペースキーなどのキー操作を判定したい場合はReadKeyが向いています。

5. 押されたキーを判定する方法

5-1. ConsoleKeyでEnterキーやEscapeキーを判定する

Console.ReadKeyで取得したキーは、ConsoleKeyを使って判定できます。

Enterキーを判定する例です。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

if (keyInfo.Key == ConsoleKey.Enter)
{
Console.WriteLine("Enterキーが押されました。");
}

Escapeキーを判定する例です。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

if (keyInfo.Key == ConsoleKey.Escape)
{
Console.WriteLine("Escapeキーが押されました。");
}

ConsoleKey.EnterConsoleKey.Escapeのように書くことで、押されたキーをわかりやすく判定できます。

5-2. if文でキー入力を分岐するサンプル

if文を使うと、押されたキーによって処理を分けられます。

C#
using System;

class Program
{
static void Main()
{
Console.WriteLine("EnterキーまたはEscapeキーを押してください。");

ConsoleKeyInfo keyInfo = Console.ReadKey(true);

if (keyInfo.Key == ConsoleKey.Enter)
{
Console.WriteLine("Enterキーが押されました。処理を続行します。");
}
else if (keyInfo.Key == ConsoleKey.Escape)
{
Console.WriteLine("Escapeキーが押されました。処理を終了します。");
}
else
{
Console.WriteLine("別のキーが押されました。");
}
}
}

少ない種類のキーを判定するだけなら、if文で十分です。

5-3. switch文で複数のキーを判定するサンプル

判定したいキーが多い場合は、switch文を使うと見やすくなります。

C#
using System;

class Program
{
static void Main()
{
Console.WriteLine("メニューを選択してください。");
Console.WriteLine("1: 開始");
Console.WriteLine("2: 設定");
Console.WriteLine("3: 終了");

ConsoleKeyInfo keyInfo = Console.ReadKey(true);

switch (keyInfo.Key)
{
case ConsoleKey.D1:
Console.WriteLine("開始を選択しました。");
break;

case ConsoleKey.D2:
Console.WriteLine("設定を選択しました。");
break;

case ConsoleKey.D3:
Console.WriteLine("終了を選択しました。");
break;

default:
Console.WriteLine("正しいメニューを選択してください。");
break;
}
}
}

数字キーを判定する場合、上部の数字キーはConsoleKey.D1ConsoleKey.D2のように表します。

テンキーの数字を判定したい場合は、ConsoleKey.NumPad1ConsoleKey.NumPad2のように書きます。

5-4. 矢印キー・スペースキー・数字キーの判定例

矢印キーを判定する例です。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

switch (keyInfo.Key)
{
case ConsoleKey.UpArrow:
Console.WriteLine("上矢印キーが押されました。");
break;

case ConsoleKey.DownArrow:
Console.WriteLine("下矢印キーが押されました。");
break;

case ConsoleKey.LeftArrow:
Console.WriteLine("左矢印キーが押されました。");
break;

case ConsoleKey.RightArrow:
Console.WriteLine("右矢印キーが押されました。");
break;
}

スペースキーを判定する例です。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

if (keyInfo.Key == ConsoleKey.Spacebar)
{
Console.WriteLine("スペースキーが押されました。");
}

数字キーを判定する例です。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

if (keyInfo.Key == ConsoleKey.D1 || keyInfo.Key == ConsoleKey.NumPad1)
{
Console.WriteLine("1キーが押されました。");
}

上部の数字キーとテンキーの両方に対応したい場合は、ConsoleKey.D1ConsoleKey.NumPad1の両方を判定するとよいでしょう。

6. キーボード入力を使った実践サンプル

6-1. 名前を入力して挨拶を表示するプログラム

最も基本的なC#のキーボード入力サンプルです。

C#
using System;

class Program
{
static void Main()
{
Console.Write("あなたの名前を入力してください: ");
string? name = Console.ReadLine();

if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("名前が入力されていません。");
}
else
{
Console.WriteLine($"こんにちは、{name}さん!");
}
}
}

Console.ReadLineで名前を受け取り、入力内容に応じてメッセージを表示しています。

6-2. 数値を入力して足し算するプログラム

次は、2つの数値を入力して足し算するプログラムです。

C#
using System;

class Program
{
static void Main()
{
Console.Write("1つ目の数値を入力してください: ");
string? input1 = Console.ReadLine();

Console.Write("2つ目の数値を入力してください: ");
string? input2 = Console.ReadLine();

bool success1 = int.TryParse(input1, out int number1);
bool success2 = int.TryParse(input2, out int number2);

if (success1 && success2)
{
int answer = number1 + number2;
Console.WriteLine($"答えは {answer} です。");
}
else
{
Console.WriteLine("数値を正しく入力してください。");
}
}
}

数値入力では、int.TryParseを使うことで入力ミスに強いプログラムになります。

6-3. キー操作でメニューを選択するプログラム

Console.ReadKeyを使うと、Enterキーを押さなくてもメニュー選択ができます。

C#
using System;

class Program
{
static void Main()
{
Console.WriteLine("メニューを選択してください。");
Console.WriteLine("1: ゲーム開始");
Console.WriteLine("2: オプション");
Console.WriteLine("3: 終了");

ConsoleKeyInfo keyInfo = Console.ReadKey(true);

switch (keyInfo.Key)
{
case ConsoleKey.D1:
case ConsoleKey.NumPad1:
Console.WriteLine("ゲームを開始します。");
break;

case ConsoleKey.D2:
case ConsoleKey.NumPad2:
Console.WriteLine("オプションを開きます。");
break;

case ConsoleKey.D3:
case ConsoleKey.NumPad3:
Console.WriteLine("アプリを終了します。");
break;

default:
Console.WriteLine("1〜3のキーを押してください。");
break;
}
}
}

このように、switch文を使えば複数のキー入力をわかりやすく分岐できます。

6-4. Enterキーで終了するコンソールアプリ

Enterキーが押されるまで処理を続けるサンプルです。

C#
using System;

class Program
{
static void Main()
{
Console.WriteLine("Enterキーを押すと終了します。");

while (true)
{
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

if (keyInfo.Key == ConsoleKey.Enter)
{
Console.WriteLine("終了します。");
break;
}

Console.WriteLine($"{keyInfo.Key} が押されました。Enterキーで終了できます。");
}
}
}

while (true)で繰り返し処理を行い、Enterキーが押されたらbreakでループを終了しています。

7. C#のキーボード入力でよくあるエラーと対処法

7-1. 入力待ちにならない・画面がすぐ閉じる場合

Visual Studioなどでコンソールアプリを実行したとき、画面がすぐ閉じてしまうことがあります。

これは、プログラムの処理が最後まで実行され、コンソール画面が閉じられているためです。

対処法として、最後にConsole.ReadLineConsole.ReadKeyを入れて、入力待ちにします。

C#
Console.WriteLine("処理が完了しました。");
Console.WriteLine("Enterキーを押すと終了します。");
Console.ReadLine();

または、何かキーを押すまで待ちたい場合は次のようにします。

C#
Console.WriteLine("何かキーを押すと終了します。");
Console.ReadKey();

学習中のサンプルでは、最後に入力待ちを入れると実行結果を確認しやすくなります。

7-2. 数値以外を入力すると例外が発生する場合

int.Parseを使っているときに数値以外を入力すると、例外が発生することがあります。

C#
string? input = Console.ReadLine();
int number = int.Parse(input);

このコードでは、ユーザーがabcのような文字を入力すると整数に変換できません。

安全に処理したい場合は、int.TryParseを使いましょう。

C#
string? input = Console.ReadLine();

if (int.TryParse(input, out int number))
{
Console.WriteLine($"入力された数値は{number}です。");
}
else
{
Console.WriteLine("数値を入力してください。");
}

ユーザー入力は必ずしも正しいとは限らないため、実用的なプログラムではTryParseを使うのが基本です。

7-3. ReadKeyで入力文字が表示される場合

Console.ReadKeyを使ったとき、押したキーが画面に表示されることがあります。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey();

入力文字を表示したくない場合は、trueを指定します。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

メニュー選択やキー判定では、画面に入力文字を表示しない方が自然な場合があります。

C#
Console.WriteLine("1: 開始 / 2: 終了");
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

7-4. 日本語入力やIME使用時の注意点

C#のコンソールアプリで日本語入力を扱う場合、IMEの状態によって入力の挙動が変わることがあります。

Console.ReadLineで日本語の文字列を入力する場合は、通常問題なく扱えます。

C#
Console.Write("名前を入力してください: ");
string? name = Console.ReadLine();

Console.WriteLine($"入力された名前: {name}");

一方、Console.ReadKeyで1キーずつ取得する場合、日本語入力中の文字は期待どおりに取得できないことがあります。

たとえば、日本語入力では1回のキー操作がそのまま1文字に対応しない場合があります。ローマ字入力、変換、確定などの処理がIME側で行われるためです。

日本語の名前や文章を入力させたい場合は、Console.ReadKeyではなくConsole.ReadLineを使うのがおすすめです。

C#
// 日本語の文章入力にはReadLineが向いている
string? message = Console.ReadLine();

キー操作を判定したい場合はReadKey、日本語を含む文章を入力したい場合はReadLineと使い分けましょう。

8. C#キーボード入力の使い分け

8-1. 文字列を入力したい場合はConsole.ReadLine

名前、住所、メッセージなど、ユーザーに文字列を入力してもらいたい場合はConsole.ReadLineを使います。

C#
Console.Write("名前を入力してください: ");
string? name = Console.ReadLine();

Console.ReadLineはEnterキーが押されるまで入力を待つため、複数文字の入力に向いています。

数値入力でも、最初はReadLineで文字列として受け取り、その後に数値へ変換します。

C#
string? input = Console.ReadLine();
int.TryParse(input, out int number);

8-2. 1つのキーだけ判定したい場合はConsole.ReadKey

Enterキー、Escapeキー、矢印キー、スペースキーなど、1つのキー操作を判定したい場合はConsole.ReadKeyを使います。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

if (keyInfo.Key == ConsoleKey.Escape)
{
Console.WriteLine("終了します。");
}

メニュー選択や簡単なゲーム操作では、Console.ReadKeyが便利です。

C#
Console.WriteLine("Aキーで攻撃、Dキーで防御");
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

8-3. 1文字ずつ読み取りたい場合の考え方

1文字ずつ入力を読み取りたい場合は、Console.ReadKeyを繰り返し使います。

C#
while (true)
{
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

if (keyInfo.Key == ConsoleKey.Enter)
{
break;
}

Console.WriteLine($"入力されたキー: {keyInfo.KeyChar}");
}

ただし、通常の文字列入力であれば、無理に1文字ずつ処理する必要はありません。

ユーザーが文章や名前を入力する場合はReadLine、キー操作のように即時反応したい場合はReadKeyを使うのが基本です。

8-4. 初心者におすすめの学習順序

C#初心者がキーボード入力を学ぶ場合は、次の順序がおすすめです。

まずは、Console.WriteLineConsole.Writeで画面に文字を表示する方法を覚えます。

次に、Console.ReadLineで文字列を入力する方法を学びます。

その後、int.TryParseを使って文字列を数値に変換する方法を練習します。

最後に、Console.ReadKeyConsoleKeyを使って、EnterキーやEscapeキーなどのキー判定を学ぶとよいでしょう。

この順序で学ぶと、C#のコンソールアプリで必要なキーボード入力の基本を無理なく理解できます。

9. C#のキーボード入力に関するよくある質問

9-1. Console.ReadLineとConsole.ReadKeyはどちらを使うべき?

文字列や数値を入力したい場合は、Console.ReadLineを使います。

C#
string? input = Console.ReadLine();

1つのキーだけを判定したい場合は、Console.ReadKeyを使います。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

たとえば、名前や年齢を入力するならReadLine、EnterキーやEscapeキーで操作するならReadKeyです。

迷った場合は、「入力内容を文章として扱いたいならReadLine」「押されたキーそのものを判定したいならReadKey」と考えるとわかりやすいです。

9-2. Enterキーを押さずに入力を受け取れる?

はい、Console.ReadKeyを使えば、Enterキーを押さずにキー入力を受け取れます。

C#
Console.WriteLine("何かキーを押してください。");
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

Console.WriteLine($"押されたキー: {keyInfo.Key}");

Console.ReadLineはEnterキーを押すまで入力が確定しません。

一方、Console.ReadKeyはキーを押した瞬間に入力を取得できます。

そのため、メニュー選択やキー操作にはConsole.ReadKeyが向いています。

9-3. 入力された文字を非表示にできる?

Console.ReadKeyの場合は、引数にtrueを指定すると入力されたキーを画面に表示しないようにできます。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

ただし、Console.ReadLineは入力中の文字が通常そのまま画面に表示されます。

パスワード入力のように文字を非表示にしたい場合は、Console.ReadKey(true)を使って1文字ずつ読み取り、自分で処理を組み立てる必要があります。

簡単な例です。

C#
using System;
using System.Text;

class Program
{
static void Main()
{
Console.Write("パスワードを入力してください: ");

StringBuilder password = new StringBuilder();

while (true)
{
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

if (keyInfo.Key == ConsoleKey.Enter)
{
break;
}

password.Append(keyInfo.KeyChar);
Console.Write("*");
}

Console.WriteLine();
Console.WriteLine("パスワード入力が完了しました。");
}
}

この例では、入力された文字の代わりに*を表示しています。

9-4. WindowsフォームやUnityでも同じ方法で使える?

Console.ReadLineConsole.ReadKeyは、基本的にコンソールアプリで使うメソッドです。

Windowsフォームアプリでは、テキストボックスやボタン、キーイベントを使って入力を扱います。

たとえば、WindowsフォームではTextBoxに入力された文字を取得したり、KeyDownイベントでキー入力を判定したりします。

Unityでは、Input.GetKeyInput.GetKeyDownなどを使ってキー入力を扱います。

C#
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("スペースキーが押されました");
}

つまり、C#という言語は同じでも、アプリの種類によってキーボード入力の取得方法は変わります。

コンソールアプリではConsole.ReadLineConsole.ReadKey、Windowsフォームではイベント、UnityではInput系のメソッドを使うと覚えておきましょう。

まとめ

C#でキーボード入力を取得するには、主にConsole.ReadLineConsole.ReadKeyを使います。

文字列を入力したい場合は、Console.ReadLineを使います。

C#
string? input = Console.ReadLine();

数値を入力したい場合も、まずはConsole.ReadLineで文字列として受け取り、int.TryParseなどで数値に変換します。

C#
if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}

1つのキーだけを取得したい場合は、Console.ReadKeyを使います。

C#
ConsoleKeyInfo keyInfo = Console.ReadKey(true);

押されたキーを判定する場合は、ConsoleKey.EnterConsoleKey.EscapeConsoleKey.SpacebarConsoleKey.UpArrowなどを使います。

C#
if (keyInfo.Key == ConsoleKey.Enter)
{
Console.WriteLine("Enterキーが押されました。");
}

C#のキーボード入力は、コンソールアプリ作成の基本です。

まずはConsole.ReadLineで文字列入力を扱い、次にTryParseで数値変換を学び、最後にConsole.ReadKeyでキー判定を練習すると、初心者でも無理なく理解できます。