此处的信息适用于整个 scanf
函数系列(包括安全版本),并描述了用于告诉 scanf
函数如何将输入流(如 stdin
的输入流 scanf
)分析为插入到程序变量中的值。
格式规范具有以下形式:
%
[*
] [width] [{h | l | ll | I64 | L}]type
format
参数指定输入的解释,并且可以包含以下一项或多项:
-
空白字符:空白 (’ ‘);制表符 (’\t’);或换行符 (‘\n’)。 空白字符将使得
scanf
读取(但不存储)输入中所有连续的空白字符,直至下一个非空白字符。 格式中的一个空白字符与输入中的任何数字(包括 0)和空白字符的组合相匹配。 -
百分号 (
%
) 除外的非空白字符。 非空白字符将使得scanf
读取(但不存储)匹配的非空白字符。 如果输入流中的下一个字符不匹配,则scanf
将会终止。 -
由百分号 (
%
) 引入的格式规范。 格式规范将使得scanf
读取输入中的字符并将其转换为指定类型的值。 该值将分配给参数列表中的一个参数。格式为从左向右读取。 不符合格式规范的字符应匹配输入流中的字符序列;将扫描但不存储输入流中的匹配字符。 如果输入流中的字符与格式规范冲突,则
scanf
将终止,并且将该字符留在输入流中,就像没有读取过它一样。遇到第一个格式规范时,第一个输入字段的值将根据此规范进行转换并储存在第一个
argument
指定的位置中。 第二个格式规范将使得第二个输入字段进行转换并储存在第二个argument
中,依此类推,直至格式字符串的末尾。将输入字段定义为第一个空白字符(空格、制表符或换行符)之前的所有字符,或第一个无法根据格式规范转换的字符之前的所有字符,或在达到最大字段宽度(如果已指定)之前的所有字符。 如果给定的规范有太多参数,则将计算但忽略多余的参数。 如果格式规范没有足够参数,则结果不可预知。
格式规范的每个字段是一个用于指定特定格式选项的字符或数字。 位于最后一个可选格式字段之后的
type
字符决定将输入字段解释为字符、字符串还是数字。最简单的格式规范仅包含百分号和一个
type
字符(例如,%s
)。 如果百分号 (%
) 后跟一个没有意义的字符作为格式控制字符,则该字符及其后面的字符(直至下一个百分号)将被视为普通字符序列,即必须与输入匹配的字符序列。 例如,若要指定要输入的百分号字符,请使用%%
。百分号后面的星号 (
*
) 将取消下一个输入字段的分配(将被解释为指定类型的字段)。 将扫描但不储存该字段。_s
函数系列的安全版本(具有scanf
后缀的版本)需要在每个c
、C
、s
、S
或[
类型的参数之后立即传入一个缓冲区大小参数。 有关scanf
系列函数的安全版本的更多信息,请参阅 scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_l。
另请参阅
本文地址:http://xnerv.wang/format-specification-fields-scanf-and-wscanf-functions/
转载自:(MSDN) Format Specification Fields: scanf and wscanf Functions