【C#入門】キーボード入力の取得方法をわかりやすく解説|Console.ReadLine・キー判定・サンプルコード付き
はじめに
C#でコンソールアプリを作るとき、最初につまずきやすいのが「キーボード入力をどうやって受け取るのか」という部分です。
画面に文字を表示するだけならConsole.WriteLineでできますが、ユーザーが入力した名前や年齢、メニュー選択などを受け取るには、Console.ReadLineやConsole.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.Parseやint.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は文字列なので、そのまま数値計算には使いにくい
数値として扱いたい場合は、文字列をintやdoubleなどの数値型に変換する必要があります。
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.ReadLineとConsole.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.EnterやConsoleKey.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.D1、ConsoleKey.D2のように表します。
テンキーの数字を判定したい場合は、ConsoleKey.NumPad1、ConsoleKey.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.D1とConsoleKey.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.ReadLineやConsole.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.WriteLineとConsole.Writeで画面に文字を表示する方法を覚えます。
次に、Console.ReadLineで文字列を入力する方法を学びます。
その後、int.TryParseを使って文字列を数値に変換する方法を練習します。
最後に、Console.ReadKeyとConsoleKeyを使って、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.ReadLineやConsole.ReadKeyは、基本的にコンソールアプリで使うメソッドです。
Windowsフォームアプリでは、テキストボックスやボタン、キーイベントを使って入力を扱います。
たとえば、WindowsフォームではTextBoxに入力された文字を取得したり、KeyDownイベントでキー入力を判定したりします。
Unityでは、Input.GetKeyやInput.GetKeyDownなどを使ってキー入力を扱います。
C#if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("スペースキーが押されました");
}
つまり、C#という言語は同じでも、アプリの種類によってキーボード入力の取得方法は変わります。
コンソールアプリではConsole.ReadLineやConsole.ReadKey、Windowsフォームではイベント、UnityではInput系のメソッドを使うと覚えておきましょう。
まとめ
C#でキーボード入力を取得するには、主にConsole.ReadLineとConsole.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.Enter、ConsoleKey.Escape、ConsoleKey.Spacebar、ConsoleKey.UpArrowなどを使います。
C#if (keyInfo.Key == ConsoleKey.Enter)
{
Console.WriteLine("Enterキーが押されました。");
}
C#のキーボード入力は、コンソールアプリ作成の基本です。
まずはConsole.ReadLineで文字列入力を扱い、次にTryParseで数値変換を学び、最後にConsole.ReadKeyでキー判定を練習すると、初心者でも無理なく理解できます。

