module Printf:sig
..end
格式化输出函数。
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
,其小数位数与在该浮点数之前给出的参数的值相同。
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
的已弃用同义词。