module Printf:sig
..end
格式化輸出函式。
val fprintf : out_channel -> ('a, out_channel, unit) format -> 'a
fprintf outchan format arg1 ... argN
根據格式字串 format
格式化參數 arg1
到 argN
,並將結果字串輸出到通道 outchan
。
格式字串是一個字元串,其中包含兩種物件:純文字字元,會直接複製到輸出通道;以及轉換規範,每個規範都會導致參數的轉換和列印。
轉換規範具有以下形式
% [旗標] [寬度] [.精確度] 類型
簡而言之,轉換規範由 %
字元組成,後接可選的修飾符和一個由一到兩個字元組成的類型。
類型及其含義如下
d
、i
:將整數參數轉換為帶符號十進制。旗標 #
會為大型數值增加底線以提高可讀性。u
、n
、l
、L
或 N
:將整數參數轉換為無符號十進制。警告:n
、l
、L
和 N
用於 scanf
,不應使用於 printf
。旗標 #
會為大型數值增加底線以提高可讀性。x
:將整數參數轉換為無符號十六進制,使用小寫字母。旗標 #
會為非零值增加 0x
前綴。X
:將整數參數轉換為無符號十六進制,使用大寫字母。旗標 #
會為非零值增加 0X
前綴。o
:將整數參數轉換為無符號八進制。旗標 #
會為非零值增加 0
前綴。s
:插入字串參數。S
:將字串參數轉換為 OCaml 語法(雙引號、跳脫字元)。c
:插入字元參數。C
:將字元參數轉換為 OCaml 語法(單引號、跳脫字元)。f
:將浮點數參數轉換為十進制表示法,樣式為 dddd.ddd
。F
:將浮點數參數轉換為 OCaml 語法(dddd.
或 dddd.ddd
或 d.ddd e+-dd
)。使用 #
旗標轉換為十六進制(請參閱 h
)。e
或 E
:將浮點數參數轉換為十進制表示法,樣式為 d.ddd e+-dd
(尾數和指數)。g
或 G
:將浮點數參數轉換為十進制表示法,樣式為 f
或 e
、E
(以較精簡者為準)。此外,任何尾隨的零都會從結果的小數部分移除,並且如果沒有剩餘的小數部分,則會移除小數點字元。h
或 H
:將浮點數參數轉換為十六進制表示法,樣式為 0xh.hhhh p+-dd
(十六進制尾數,十進制指數並表示 2 的冪)。B
:將布林參數轉換為字串 true
或 false
。b
:轉換布林參數(已棄用;請勿在新程式中使用)。ld
、li
、lu
、lx
、lX
、lo
:將 int32
參數轉換為第二個字母指定的格式(十進制、十六進制等)。nd
、ni
、nu
、nx
、nX
、no
:將 nativeint
參數轉換為第二個字母指定的格式。Ld
、Li
、Lu
、Lx
、LX
、Lo
:將 int64
參數轉換為第二個字母指定的格式。a
:使用者定義的印表機。採用兩個參數,並將第一個參數應用於 outchan
(目前的輸出通道)和第二個參數。因此,第一個參數的類型必須為 out_channel -> 'b -> unit
,第二個參數的類型必須為 'b
。函式產生的輸出會插入 fprintf
在目前點的輸出中。t
:與 %a
相同,但僅採用一個參數(類型為 out_channel -> unit
)並將其應用於 outchan
。{ fmt %}
:將格式字串參數轉換為其類型摘要。參數必須與內部格式字串 fmt
具有相同的類型。( fmt %)
:格式字串替換。採用格式字串參數,並將其替換為內部格式字串 fmt
以列印後續參數。參數必須與內部格式字串 fmt
具有相同的類型。!
:不採用任何參數並刷新輸出。%
:不採用任何參數並輸出一個 %
字元。@
:不採用任何參數並輸出一個 @
字元。,
:不採用任何參數且不輸出任何內容:用於轉換規範的 no-op 分隔符。可選的 flags
為
-
:靠左對齊輸出(預設為靠右對齊)。0
:對於數值轉換,使用零而不是空格來填充。+
:對於帶符號的數值轉換,如果數字為正數,則在數字前加上 +
符號。#
:為整數類型和浮點數類型 F
請求替代格式樣式。可選的 width
是一個整數,表示結果的最小寬度。例如,%6d
會列印一個整數,並在其前面加上空格以至少填滿 6 個字元。
可選的 precision
是一個點 .
,後接一個整數,表示在 %f
、%e
、%E
、%h
和 %H
轉換中小數點後有多少位數,或者 %F
、%g
和 %G
轉換中出現的最大有效位數。例如,%.4f
會列印一個具有 4 個小數位數的 float
。
width
或 precision
中的整數也可以指定為 *
,在這種情況下,會取得額外的整數參數來指定對應的 width
或 precision
。此整數參數會緊接在要列印的參數之前。例如,%.*f
會列印一個 float
,其小數位數與 float 之前給定的參數值相同。
val printf : ('a, out_channel, unit) format -> 'a
與 Printf.fprintf
相同,但輸出到 stdout
。
val eprintf : ('a, out_channel, unit) format -> 'a
與 Printf.fprintf
相同,但輸出到 stderr
。
val sprintf : ('a, unit, string) format -> 'a
與 Printf.fprintf
相同,但不是在輸出通道上列印,而是傳回一個字串,其中包含格式化參數的結果。
val bprintf : Buffer.t -> ('a, Buffer.t, unit) format -> 'a
與 Printf.fprintf
相同,但不是在輸出通道上列印,而是將格式化的參數附加到給定的可延伸緩衝區(請參閱模組 Buffer
)。
val ifprintf : 'b -> ('a, 'b, 'c, unit) format4 -> 'a
與 Printf.fprintf
相同,但不列印任何內容。在條件式列印時,可用於忽略某些內容。
val ibprintf : Buffer.t -> ('a, Buffer.t, unit) format -> 'a
與 Printf.bprintf
相同,但不列印任何內容。在條件式列印時,可用於忽略某些內容。
帶有續體的格式化輸出函式。
val kfprintf : (out_channel -> 'd) ->
out_channel -> ('a, out_channel, unit, 'd) format4 -> 'a
與 fprintf
相同,但不會立即傳回,而是在列印結束時將輸出通道傳遞給其第一個參數。
val ikfprintf : ('b -> 'd) -> 'b -> ('a, 'b, 'c, 'd) format4 -> 'a
與上述 kfprintf
相同,但不列印任何內容。在條件式列印時,可用於忽略某些內容。
val ksprintf : (string -> 'd) -> ('a, unit, string, 'd) format4 -> 'a
與上述 sprintf
相同,但不是傳回字串,而是將其傳遞給第一個參數。
val kbprintf : (Buffer.t -> 'd) ->
Buffer.t -> ('a, Buffer.t, unit, 'd) format4 -> 'a
與 bprintf
相同,但不會立即傳回,而是在列印結束時將緩衝區傳遞給其第一個參數。
val ikbprintf : (Buffer.t -> 'd) ->
Buffer.t -> ('a, Buffer.t, unit, 'd) format4 -> 'a
與上述 kbprintf
相同,但不列印任何內容。在條件式列印時,可用於忽略某些內容。
已棄用
val kprintf : (string -> 'b) -> ('a, unit, string, 'b) format4 -> 'a
ksprintf
的已棄用同義詞。