0

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

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

如果格式参数是%d(no space) ,编译器将返回失败并显示以下信息:

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

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

4

1 回答 1

3

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

真的不可能确切地知道发生了什么,因为我不知道你的程序的标准输入上出现了什么。可能问题'\n'出在上一行的末尾。

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

于 2013-03-07T05:54:54.547 回答