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 |