为什么“%d”在OCaml scanf格式中出错了?

时间:2013-03-07 03:58:01

标签: ocaml

当我用ocaml实现read_int函数时(见下文),

let read_int () = Scanf.bscanf Scanf.Scanning.stdin "%d" (fun x -> x)

如果format参数为%d(无空格),编译器将返回失败并显示以下信息:

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

但如果我使用' '%d(带空格的前缀),那很好,为什么%d错了? %d' '%d之间有什么区别? 。感谢。

1 个答案:

答案 0 :(得分:3)

scanf格式"%d"匹配一串十进制数字。这不包括空格。在scanf格式字符串中,空格(" ")代表任意数量的空格(空格,制表符,换行符)。

实际上不可能确切地说出其他内容,因为我不知道程序的标准输入上出现了什么。可能问题是出现在上一行末尾的'\n'

更新:对于它的价值,我早就决定(在我的C编程日),scanf导致的问题比解决的问题多。它在处理输入线时特别糟糕。最好通过另一种方法将输入分解为行,并在结果字符串上使用sscanf(或int_of_string)。

相关问题