OCamlでのscanf後のread_lineがEnd_of_fileを生じる理由
test.ml:
let () = begin
Scanf.scanf " %d %d " @@ Printf.printf "scanf : (%d, %d)\n";
for i = 1 to 2 do
print_string "read_line : ";
print_endline @@ read_line ()
done
end
input.txt:
12 34
hello world
this is a test
として、cat input.txt | ocaml test.ml
とすると、
scanf : (12, 34)
read_line : Fatal error: exception End_of_file
となり、read_line
が例外を投げてしまいます(本当は
scanf : (12, 34)
read_line : hello world
read_line : this is a test
となって欲しいです)。
毎行read_line
してsscanf
を使えば期待する動作にできるのは分かるのですが、何故こうなるのかが分かりません。また、単にscanf
とread_line
を併用できるのであればその方法も教えて頂けると有難いです。