Printf.printf "%d\n"(a - b));; 在我第-6ren">
gpt4 book ai didi

ocaml - 接收 Stdlib.Scanf.Scan_failure : character '\\n'

转载 作者:行者123 更新时间:2023-12-01 22:54:59 25 4
gpt4 key购买 nike

我按照指导下载并执行了 utop here ,然后我运行了以下代码:

Scanf.scanf "%d %d"(fun a b -> Printf.printf "%d\n"(a - b));;

在我第一次输入 3 1 时,它运行良好,给出 2 - : unit = (),

但在第二次尝试相同的输入后,它继续给出消息:

Exception:
Stdlib.Scanf.Scan_failure
"scanf: bad input at char number 3: character '\\n' is not a decimal digit".

最佳答案

Scanf 消耗尽可能少的输入。

如果你评价

Scanf.scanf "%d %d" (fun a b -> Printf.printf "%d\n" (a - b))

并发送到标准输入

3 1\n

Scanf 读取并使用 3 1 前缀并将换行符 \n 留在输入缓冲区中。然后下一次调用

Scanf.scanf "%d %d" (fun a b -> Printf.printf "%d\n" (a - b))

将卡在这个剩余的字符上并失败

Stdlib.Scanf.Scan_failure
"scanf: bad input at char number 3: character '\\n' is not a decimal digit".

在这种情况下,您可以使用此 \n 字符

Scanf.scanf "\n" ();
Scanf.scanf "%d %d" (-);;

Scanf.scanf "\n%d %d" (-);;

但是,更好的解决方案可能是在您的输入格式中添加换行符:

Scanf.scanf "%d %d\n" (fun a b -> Printf.printf "%d\n" (a - b))

关于ocaml - 接收 Stdlib.Scanf.Scan_failure : character '\\n' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73472783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com