输入函数具有以下原型:
int scanf(const char* restrict format, ...);
int scanf_s(const char* restrict format, ...);
int vscanf(const char* restrict format, va_list arg);
int vscanf_s(const char* restrict format, va_list arg);
int sscanf(const char* restrict source, const char* restrict format, ...);
int sscanf_s(const char* restrict source, const char* restrict format, ...);
int vsscanf(const char* restrict source, const char* restrict format, va_list arg);
int vsscanf_s(const char* restrict source, const char* restrict format, va_list arg);
int fscanf(FILE* restrict stream, const char* restrict format, ...);
int fscanf_s(FILE* restrict stream, const char* restrict format, ...);
int vfscanf(FILE* restrict stream, const char* restrict format, va_list arg);
int vfscanf_s(FILE* restrict stream, const char* restrict format, va_list arg);
名称以_s
结尾的函数是可选的安全边界检查版本。它要求__STDC_WANT_LIB_EXT1__
定义为1
。这些函数返回操作读取的数据项数量。
省略号表示此处可以有零个或多个参数。安全函数要求为c
,s
和类型说明符
提供两个参数,在这种情况下,第一个必须是指针,第二个必须是size_t
类型的值。
数据项的格式规范具有以下形式:
%[*][width][size_flag]type
方括号之间的项目是可选的。必需部分是标记格式规范开头的%
字符和最后的类型转换类型规范,可选部分的选择是:
[*]
表示应扫描与此格式规范对应的输入数据项但不存储。 例如,%*d
将扫描整数值并将其丢弃。[width]
指定要为此输入值扫描的最大字符数。 例如,%2d
最多可读取两个字符作为整数值。[size_flag]
修改由规范的类型部分指定的输入类型。 可能的size_flag
规范是:
标志 | 含意 |
---|---|
l |
a ,d ,i ,u ,o ,x ,X 或n 转换类型适用于参数 |
long *
或unsigned long *
的类型,当应用于类型a
,A
,e
,E
,f
,F
,g
或G
转换时。 |
| L
| 指定以下浮点转换说明符适用于long double *
参数。 |
| ll
| 指定d
,i
,u
,o
,x
,X
或n
转换类型适用于long long *
或unsigned long long *
类型的参数。 |
| h
| 指定d
,i
,u
,o
,x
,X
或n
转换类型适用于short *
或unsigned short *
类型的参数。 |
| hh
| 指定d
,i
,u
,o
,x
,X
或n
转换类型适用于signed char *
或unsigned char *
类型的参数。 |
| j
| 指定以下d
,i
,u
,o
,x
,X
或n
转换类型适用于intmax_t *
或uintmax_t *
类型的参数。 |
| z
| 指定以下d
,i
,u
,o
,x
,X
或n
转换类型适用于size_t *
类型的参数。 |
| t
| 指定以下d
,i
,u
,o
,x
,X
或n
转换类型适用于ptrdiff_t *
类型的参数。 |
type
指定数据转换的类型,可以是以下任何一种:
类型 | 含意 |
---|---|
c |
读取单个字符作为char 类型。 |
d 或 i |
读取连续的十进制数字作为int 类型的值。 |
u |
读取连续的十进制数字作为unsigned int 类型的值。 |
o |
读取连续的八进制数字作为unsigned int 类型的值。 |
x 或 X |
读取连续的十六进制数字作为unsigned int 类型的值。 |
a ,A , e ,E , f , F , g 或 G |
读取可选的带符号浮点值作为float 类型的值。 |
s |
读取连续的字符,直到到达空格,并将读取的字符存储在相应参数指向的缓冲区中。 |
p |
读取输入作为指针值,相应的参数必须是void ** 类型。 |
% |
匹配未存储的输入中的单个% 字符。 |
n |
不读取任何输入,但到目前为止从输入源读取的字符数存储在相应的参数中,该参数的类型应为int * 。 |
要读取包含空格字符的字符串,请使用%[set_of_characters]
。%[abcdefghijklmnopqrstuvwxyz]
将读取任何小写字母和空格序列作为单个字符串。%[^,!]
将读取一个字符序列,直到找到逗号或感叹号,这将结束字符串输入。^
表示否定。