C#入門⑤ キーボードから入力を受け取る

前回は「計算する(演算子)」の話をしました。

予告では「次はif文」と書きましたが、その前にひとつ。
キーボードから文字を入力してもらう方法をやっておきます。これができると、プログラムが一気に「対話」っぽくなります。

これまでは「表示」だけだった

第1回から、画面に文字を出す Console.WriteLine を使ってきました。これは、プログラムから人へ出力(表示)する命令です。

Console.WriteLine("おはよう");   // プログラム → 人

今回はその逆。人からプログラムへ、入力してもらいます。使うのは Console.ReadLine です。

string name = Console.ReadLine();   // 人 → プログラム

Console.ReadLine() は、「キーボードから1行入力されるのを待って、その文字を受け取る」命令です。

受け取った文字は、第2回でやった変数(箱)に入れて、覚えておきます。上の例では name という箱に入れています。

実際に動かしてみる

名前を聞いて、あいさつするプログラムです。

Console.WriteLine("お名前は?");
string name = Console.ReadLine();
Console.WriteLine(name + "さん、こんにちは!");

これを実行すると、こうなります。

お名前は?
山田 ← ここでキーボードから入力
山田さん、こんにちは!

流れを追ってみましょう。

  1. 「お名前は?」と表示する
  2. ReadLine で、入力を待つ(ここでプログラムは一旦止まる)
  3. 「山田」と入力すると、それが name の箱に入る
  4. 「山田さん、こんにちは!」と表示する

name + "さん、こんにちは!"` の + は、第4回の足し算と同じ記号ですが、文字列どうしを + すると、つなげるという意味になります。「山田」+「さん、こんにちは!」で「山田さん、こんにちは!」ですね。

数字を入力してもらうときの注意

ここが今回の山場です。

ReadLine で受け取ったものは、必ず文字列(string)になります。たとえ数字を入力しても、です。

だから、こういうコードはエラーになります。

Console.WriteLine("年齢は?");
int age = Console.ReadLine();   // 文字列を、整数の箱に入れようとしてエラー!

ReadLine が返すのは文字列(string)なのに、age は整数(int)の箱。第3回でやった「箱の種類が合わない」状態です。

数字として受け取りたいときは、文字列を整数に変換する必要があります。

Console.WriteLine("年齢は?");
string input = Console.ReadLine();   // まず文字列として受け取る
int age = int.Parse(input);          // 整数に変換する

int.Parse(...) は「カッコの中の文字列を、整数に変換する」命令です。

第3回で「数字の100」と「文字の"100"」は別物だと書きました。まさにそれです。入力された "20" は文字なので、計算に使うには、整数の 20 に変換してあげる必要があるのです。

つまずきポイント

ReadLine の結果は、いつでも文字列。
数字がほしいときは、変換を忘れない。

これを忘れて、入力された数字をそのまま計算しようとして、つまずく人がとても多いです。「入力=文字列」と、まず覚えてしまいましょう。

まとめ

Console.ReadLine() で、キーボードから入力を受け取れる。
受け取るのは、いつも文字列。
数字として使うなら、int.Parse() で変換する。

次回こそ、条件によって動きを変える if文 です。今回の「入力」と組み合わせると、ぐっとプログラムらしくなります。