module Printf: Printf
val fprintf : out_channel -> ('a, out_channel, unit) format -> 'a
fprintf outchan format arg1 ... argN
根据格式字符串 format
格式化参数 arg1
到 argN
,并将结果字符串输出到通道 outchan
。
格式字符串是一个字符字符串,包含两种类型的对象:普通字符,这些字符简单地复制到输出通道;以及转换说明,每个转换说明都会导致参数的转换和打印。
转换说明具有以下形式
% [flags] [width] [.precision] type
简而言之,转换说明由 %
字符组成,后跟可选的修饰符和一个由一个或两个字符组成的类型。
类型及其含义如下
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
的已弃用同义词。