前回文字列を入力してみましたが、今回は数値を入力してみます。
前回お話しした通り、 readln() 関数では、半角の文字からなる「文字列」しか読み込めません。
数値を得るには、この文字列を数値に変換しましょう。
import std.conv;
と import std.stdio; の下に書き入れ、
int hoge = toInt("50");
とすることで、文字列をint型に変換することができます。
しかし、前回の readln() で読み込んだ文字列は直接この関数を通すことができません。
readln() 関数を用いて読み込んだ文字列には文字列の最後に改行文字("\n"や"\r", "\r\n")が含まれているからです。
これを取り除かないとうまく変換されないので、これを取り除く作業もします。
取り除くには、
import std.string;
と import std.stdio; の下に書き入れ、
char[] hoge;
hoge = readln();
hoge = chomp(hoge).dup;
とすることで改行文字を取り除いた文字列を得ることができます。
.dupはおまじないです。(D2.0で必要です。文字列のコピーをとります。)
これをしない場合、D2.0ではこのようなエラーをはきます
cannot implicitly convert expression (chomp(cast(const(char)[])readln(stdin),null)) of type const(char)[] to char[]
これは、「内容を変更してはいけない文字列 const(char)[] 型を内容を変更してもよい char[] 型に暗黙的に変換できない」という意味です。
これを回避する方法はいくつかありますが、ここではとりあえず.dupとしておきます。
詳しくは、cast、const/final/invariant、autoなどのキーワードなどとともに、のちに解説を加えます。
まぁ、とにかく、入力した文字列を数値に変換するには、
import std.conv;
import std.string;
と import std.stdio; というおまじないの下に書き、
char[] hoge;
hoge = readln();
hoge = chomp(hoge).dup;
int fuga = toInt(hoge);
と書くことになりますね。
また、数値以外にも、実数を読み込むこともできます。
real fuga = toReal(hoge);