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。