readline() を使うと、 改行までの入力を文字列として取得できる。 単に改行したり、Ctrl+d (C-D) を入力すると、 空文字列 "" が返される。
julia> s=readline()
abc
"abc"
julia> s=readline()
← 単に改行
""
julia> s=readline()
"" ← ctrl+D を入力
|
Base.prompt(文字列) を使うと、 文字列を(改行なしで)表示した上で、 改行までの入力を文字列として取得できる。
julia> s=Base.prompt("入力して下さい(最後に[enter])")
入力して下さい(最後に[enter]): こんにちは
"こんにちは"
|
数値を表す文字列を数値に変換するには parse(型, 文字列) を使う。
julia> s=Base.prompt("整数を入力して下さい")
整数を入力して下さい: 123
"123"
julia> a=parse(Int,s)
123
|
julia> s=Base.prompt("数を入力して下さい")
数を入力して下さい: 123.456
"123.456"
julia> a=parse(Float64,s)
123.456
julia> a=parse(Float32,s)
123.456f0
|
空白文字で区切って複数の数値が含まれている文字列を読むには、 まず split() で分割してから処理をする。
julia> str="one 2 スリー"
"one 2 スリー"
julis> s=split(str)
3-element Array{SubString{String},1}:
"one"
"2"
"スリー"
julia> ns=length(s)
julia> for i=1:ns
println(s[i])
end
one
2
スリー
julia> str2="1 2.0 3"
"1 2.0 3"
julia> s2=split(str2)
3-element Array{SubString{String},1}:
"1"
"2.0"
"3"
julia> a=similar(s2,Float64); # a=zeros(length(s2)); でも良い
julia> for i=1:length(s2)
a[i]=parse(Float64,s2[i])
end
julia> a
3-element Array{Float64,1}:
1.0
2.0
3.0
|
では、応用問題。C で良く使うパターン
int n;
double a,b;
...
printf("n,a,bを入力: ");
scanf("%d%lf%%lf", &n, &a, &b);
printf("n=%d, a=%f, b=%f\n", n, a, b);
|
次のようにすれば良い (まあ scanf() を使うプログラムの書き方が、 他のプログラミング言語で自然かは良く分からないが)。
| testinput.jl |
s=split(Base.prompt("n,a,bを入力"))
n=parse(Int,s[1])
a=parse(Float64,s[2])
b=parse(Float64,s[3])
println("n=$n, a=$a, b=$b")
|
| 実行例 |
% julia testinput.jl n,a,bを入力: 100 0 1 n=100, a=0.0, b=1.0 |