格式规范字段:scanfwscanf 函数

此处的信息适用于整个 scanf 函数系列,包括安全版本。 它介绍用于告诉 scanf 函数如何将输入流(例如输入流 stdin)分析为插入到程序变量中的值的符号。

format 参数是一个字符串,它指定输入的解释,可以包含一个或多个以下项:

  • 空白字符:空白 ( );制表符 (\t);或换行符 (\n)。 空白字符将使得 scanf 读取(但不存储)输入中所有连续的空白字符,直至下一个非空白字符。 格式中的一个空白字符与输入中的任何数字(包括 0)和空白字符的组合相匹配。

  • 百分号 (%) 除外的非空白字符。 非空白字符将使得 scanf 读取(但不存储)匹配的非空白字符。 如果输入流中的下一个字符不匹配,则 scanf 将会终止。

  • 由百分号 (%) 引入的格式规范。 格式规范将使得 scanf 读取输入中的字符并将其转换为指定类型的值。 该值将分配给参数列表中的一个参数。

    格式规范具有以下形式:

    %[*][width][{h|l|ll|I64|L}]type

    此处,widthhlllI64L 表示scanf宽度规范type 表示 scanf 类型字段字符

format 参数字符串从左到右读取。 不符合格式规范的字符应匹配输入流中的字符序列。 将扫描但不存储输入流中的匹配字符。 如果输入流中的字符与格式规范冲突,则 scanf 将终止,并且将该字符留在输入流中,就像没有读取过它一样。

遇到第一个格式规范时,第一个输入字段的值将根据此规范进行转换。 此值存储在 format 参数后面的第一个参数所指定的位置。 第二个格式规范将使得第二个输入字段进行转换并存储在下一个参数中,依此类推,直至格式字符串的末尾。

将输入字段定义为:第一个空白字符(空格、制表符或换行符)之前的所有字符,或第一个无法根据格式规范转换的字符之前的所有字符,或在达到最大字段宽度(如果已指定)之前的所有字符。 如果给定的规范有太多参数,则将计算但忽略多余的参数。 如果格式规范没有足够参数,则结果不可预知。

格式规范的每个字段是一个用于指定特定格式选项的字符或数字。 位于最后一个可选格式字段之后的 type 字符决定将输入字段解释为字符、字符串还是数字。

最简单的格式规范仅包含百分号和一个 type 字符(例如,%s)。 如果百分号 (%) 后跟一个没有意义的字符作为格式控制字符,则该字符及其后面的字符(直至下一个百分号)将被视为普通字符序列。 也就是说,它们被视为必须与输入匹配的字符序列。 例如,若要指定要输入的百分号字符,请使用 %%

百分号后面的星号 (*) 将取消下一个输入字段的分配(将被解释为指定类型的字段)。 将扫描该字段但不将其存储在参数中。

_s 函数系列的安全版本(具有 scanf 后缀的版本)要求每个 cCsS[ 类型的参数都有一个紧跟其后传递的缓冲区大小参数。 有关 scanf 函数系列的安全版本的详细信息,请参阅 scanf_s_scanf_s_lwscanf_s_wscanf_s_l

另请参阅

scanf 宽度规范
scanf 类型字段字符
scanf_scanf_lwscanf_wscanf_l
scanf_s_scanf_s_lwscanf_s_wscanf_s_l