コンソールアプリケーションを使った際に、コンソール画面からユーザーに入力値を入力してもらい、その値をプログラム内で使用する方法を紹介します。
画面からの入力値を受け取れるようになると、プログラミングの柔軟性がグッと増しますし、何よりも自分で書いたソースコードを、自分の思い通りに外側から操作できるので楽しくなってきます。
プログラミングを駆使して作成するアプリケーションは、ユーザーとの対話で処理を進めるのが基本なので、ここが「本格的なアプリケーションの入り口」といえるかもしれません。
コンソール画面で入力値を取得する方法
コンソール画面で入力値を受け取るには「Console.ReadLine()」という機能を使って実現します。この機能は画面からの入力値を「文字列型」で受け取ってくれる機能になります。「文字列型ってなんだっけ」と思った人は前章を復習しておきましょう。
string input = Console.ReadLine();
実際のソースコードでは上記のように記載します。次の章でサンプルを作成しながら処理を見ていきますので、今の段階では「そうやって書くんだ~」くらいで理解してもらえれば十分です。
また、イコール記号の右側「Console.ReadLine()」で受け取ってくれる値を「戻り値」と呼んだりもします。これは「機能から戻ってくる値」のことを言っています。ですので、「文字列型の変数inputにConsole.ReadLine()の戻り値を代入する」と処理を説明できます。
入力値を取得するサンプル
導入は済んだということで、ここからあなたにもサンプルを書いてもらいながら、コンソール画面から入力値を受け取る方法を学んでもらいます。ここでは文字列の入力値と数値型の入力値を受け取る方法を解説します。
文字列の入力値を受け取る方法
新しいアプリケーションを作成して以下のコードを書いてみてください。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace App01
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("何か入力してください。");
string input = Console.ReadLine();
Console.WriteLine();
Console.Write("入力値は「");
Console.Write(input);
Console.Write("」でした。");
Console.ReadLine();
}
}
}
上記のサンプルが書けたら実行してみましょう。適当に入力してエンターキーを押したら、一行改行してその下に以下のように表示されたと思います。
入力値は「○○○○○○○○」でした。
「Console.WriteLine()」と「Console.Write()」をうまく使うと、画面にメッセージを綺麗に出すことができます。いろいろと工夫してみると面白いです。
注目は「string input = Console.ReadLine();」の部分ですね。この記事の最初のほうにも書きましたが、「Console.ReadLine()」は文字列型で値を返してくれます。戻り値がstring型ですので、左側の受ける変数の型もstring型となります。
数値型の入力値を受け取る方法
「数値型の入力値を受け取れると思いますか?」
答えは「できません」です。先ほどから書いていますが、「Console.ReadLine()」はどんなに頑張っても文字列型でしか戻り値を返してくれません。数値型として入力値を受け取ることはできないので、別の方法で入力値を数値型にするしかないのです。
要するに「文字列型にして数値に変換」してしまえばよいのです。ではサンプルを新しいアプリケーションを使って書いていきましょう。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace App02
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("数値を入力してください。");
string input = Console.ReadLine();
int inputNum = Convert.ToInt32(input);
Console.WriteLine();
Console.Write("入力値:");
Console.WriteLine(inputNum.ToString());
Console.ReadLine();
}
}
}
今回もプログラムを書いたら実際に動かして、あなたの目で動きを確認してみてください。デバッグを駆使して変数の中身を確認するなどすると理解が進みます。
先ほども言っていますが「Console.ReadLine()」は文字列型しか戻せません。なので文字列を変換してint型に変換するようにしています。「Convert.ToInt32();」という処理の括弧の中に数値に変換できる文字を記述することで数値に変換してくれます。
ガイダンスの後に入力値を文字列型で受け取るように記述し、その下で数値型に変換するようにしています。いまは理解しやすいように2行に分けて記述していますが、まとめて記述することも可能です。サンプルを以下のように書き換えてみましょう。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace App02
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("数値を入力してください。");
int inputNum = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
Console.Write("入力値:");
Console.WriteLine(inputNum.ToString());
Console.ReadLine();
}
}
}
上記のように記述することで、入力値の受け取りと数値への変換を一気に行えます。複数の処理をまとめて記述することで、ソースコードがスッキリしました。このようにプログラムを書ける時は、積極的にシンプルさを突き詰めてみるのもいい練習になります。