9.2 標準入力からの入力 (C言語の scanf()の真似など)

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);
を Julia でするには?

次のようにすれば良い (まあ 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



桂田 祐史