scanf 类型字段字符

以下信息适用于 scanf 任意的函数系列,包括安全版本,如 scanf_s。

type 字符是唯一要求的格式字段;在任何可选字段格式后出现。 type 字符确定关联参数是否被解释为字符、字符串或数字。

scanf 函数的类型字符

字符

预期输入的类型

参数类型

在安全版本的规格参数?

c

字符。 当使用 scanf 函数,指定单一字节字符;当使用 wscanf 函数,指定宽字符。 当指定了 c,通常读取跳过空白字符。 读取下一个非空白单字节字符,请使用%1s;读取下一个非空白宽字符,请使用 %1ws。

当使用 scanf 函数时,指向 char,当使用 wscanf 函数,指向 wchar_t。

必选。 范围不包括空结束符的空间。

C

相反大小字符。 当使用 scanf 函数,指定宽字符;当使用 wscanf 函数,指定单字节字符。 当指定了 C,通常读取跳过空白字符。 读取下一个非空白单字节字符,请使用%1s;读取下一个非空白宽字符,请使用 %1ws。

当使用 scanf 函数时,指向 wchar_t,当使用 wscanf 函数,指向 char。

必选。 范围参数不包括空结束符的空间。

d

十进制整数。

指向 int 的指针。

不可以。

i

一个 Integer。 如果输入字符串以“0x”或“0X”开始,则为十六进制,如果该字符串以“0 "开始,则为八进制,否则为十进制。

指向 int 的指针。

不可以。

o

八进制整数。

指向 int 的指针。

不可以。

u

无符号的十进制整数。

指向unsignedint 的指针。

不可以。

x

十六进制整数。

指向 int 的指针。

不可以。

e, E, f, g, G

浮点值由可选的符号(+或 - )中,一系列含有小数点的一个或多个十进制数字,和可选的指数(“e”或“E”),后跟一个可选符号整数值组成。

指向 float 的指针。

不可以。

n

从流或缓冲区中没有输入读取。

指向 int的指针,是存储在字符数中成功地读取流或缓存,多在当前调用 scanf 函数或 wscanf 函数。

不可以。

s

字符串,直到第一个空白字符 (空格、制表符、换行符)。 若要读取不是由空格为分隔符的字符串,请使用一组方括号 ([ ]),如 scanf 宽度规范所述。

当使用 scanf 函数,指定单字节的字符数组;当使用 wscanf 函数,指定宽字节数组。 在任何情况下,字符数组必须足够大为输入域和终止 null 字符,它会自动添加。

必选。 范围包含空结束符的空间。

S

相反范围字符字符串,直到第一个空白字符 (空格、制表符、换行符)。 若要读取不是由空格为分隔符的字符串,请使用一组方括号 ([ ]),如 scanf 宽度规范所述。

当使用 scanf 函数,指定的字符数组;当使用 wscanf 函数,指定单字节字符数组。 在任何情况下,字符数组必须足够大为输入域和终止 null 字符,它会自动添加。

必选。 范围包含空结束符的空间。

a 和 A 说明符(请参阅 printf 类型字段字符) 不能使用 scanf。

如果需要,范围参数应该跟随适用的参数立刻被传递到参数列表中。 例如,以下代码:

char string1[11], string2[9];
scanf("%10s %8s", string1, 11, string2, 9);

读取一个最大长度为 10 的字符串到 string1和一个最大长度为 8 的字符串到 string2。 因为必须为空结束符保留空间,所以缓冲区大小应该至少比指定宽度多一个。

格式字符串可以处理单字节或宽字符输入,不管是否使用函数的单字节或字符宽字符版本。 因此,使用 scanf 函数和 wscanf 函数读取单字节或宽字符,如下使用格式说明符。

读取字符作为

使用此函数

这些格式说明符

单字节

scanf 函数

c、hc 或 hC

单字节

wscanf 函数

C、hc 或 hC

wscanf 函数

c、lc 或 lC

scanf 函数

C、lc 或 lC

扫描使用 scanf 函数和 wscanf 函数的字符串,请使用上表的格式类型说明符 s 和 S 而不是 c 和 C。

请参见

参考

scanf、_scanf_l、wscanf、_wscanf_l