当我用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
之间有什么区别? 。感谢。
答案 0 :(得分:3)
scanf
格式"%d"
匹配一串十进制数字。这不包括空格。在scanf
格式字符串中,空格(" "
)代表任意数量的空格(空格,制表符,换行符)。
实际上不可能确切地说出其他内容,因为我不知道程序的标准输入上出现了什么。可能问题是出现在上一行末尾的'\n'
。
更新:对于它的价值,我早就决定(在我的C编程日),scanf
导致的问题比解决的问题多。它在处理输入线时特别糟糕。最好通过另一种方法将输入分解为行,并在结果字符串上使用sscanf
(或int_of_string
)。