module Printf: Printf
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
相同。!
:不接受參數,並刷新輸出。%
:不接受參數,並輸出一個 %
字元。@
:不接受參數,並輸出一個 @
字元。,
:不接受參數,且不輸出任何內容:用於轉換規格的空操作分隔符。可選的 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
同義詞。