0
當我實現與ocaml的(見下文)read_int功能,爲什麼「%d」在OCaml scanf格式中是錯誤的?
let read_int() = Scanf.bscanf Scanf.Scanning.stdin "%d" (fun x -> x)
如果格式參數爲%d
(無空格),編譯器將返回失敗以下信息:
Exception:
Scanf.Scan_failure
"scanf: bad input at char number 1: ``character '\\n' is not a decimal digit''".
但如果我使用' '%d
(帶空格的前綴),那很好,爲什麼%d
是錯誤的? %d
和' '%d
之間的區別是什麼? 。謝謝。
非常感謝您,我認爲我們應該始終使用「%d」而不是「%d」來防止潛在的錯誤。 – 2013-03-07 07:35:22
我個人傾向於完全避免使用scanf,並進行真正的lexing(即ocamllex之類的)。該代碼通常變得更容易理解,操縱,擴展,並且不應該比手動調試慢得多。 – didierc 2013-03-07 17:04:01
當然,我傾向於使用'scanf'來進行快速測試,我打算稍後扔掉。有一個'printf'的反例是一個好主意,但它在實踐中出人意料的糟糕。 – 2013-03-07 17:12:26