易百教程

输入格式规范

输入函数具有以下原型:

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。这些函数返回操作读取的数据项数量。
省略号表示此处可以有零个或多个参数。安全函数要求为cs类型说明符提供两个参数,在这种情况下,第一个必须是指针,第二个必须是size_t类型的值。
数据项的格式规范具有以下形式:

%[*][width][size_flag]type

方括号之间的项目是可选的。必需部分是标记格式规范开头的%字符和最后的类型转换类型规范,可选部分的选择是:

  • [*]表示应扫描与此格式规范对应的输入数据项但不存储。 例如,%*d将扫描整数值并将其丢弃。
  • [width]指定要为此输入值扫描的最大字符数。 例如,%2d最多可读取两个字符作为整数值。
  • [size_flag]修改由规范的类型部分指定的输入类型。 可能的size_flag规范是:
标志 含意
l adiuoxXn转换类型适用于参数

long *unsigned long *的类型,当应用于类型aAeEfFgG转换时。 |
| L | 指定以下浮点转换说明符适用于long double *参数。 |
| ll | 指定diuoxXn转换类型适用于long long *unsigned long long *类型的参数。 |
| h | 指定diuoxXn转换类型适用于short *unsigned short *类型的参数。 |
| hh | 指定diuoxXn转换类型适用于signed char *unsigned char *类型的参数。 |
| j | 指定以下diuoxXn转换类型适用于intmax_t *uintmax_t *类型的参数。 |
| z | 指定以下diuoxXn转换类型适用于size_t *类型的参数。 |
| t | 指定以下diuoxXn转换类型适用于ptrdiff_t *类型的参数。 |

type指定数据转换的类型,可以是以下任何一种:

类型 含意
c 读取单个字符作为char类型。
di 读取连续的十进制数字作为int类型的值。
u 读取连续的十进制数字作为unsigned int类型的值。
o 读取连续的八进制数字作为unsigned int类型的值。
xX 读取连续的十六进制数字作为unsigned int类型的值。
a,A, e,E, f, F, gG 读取可选的带符号浮点值作为float类型的值。
s 读取连续的字符,直到到达空格,并将读取的字符存储在相应参数指向的缓冲区中。
p 读取输入作为指针值,相应的参数必须是void **类型。
% 匹配未存储的输入中的单个%字符。
n 不读取任何输入,但到目前为止从输入源读取的字符数存储在相应的参数中,该参数的类型应为int *

要读取包含空格字符的字符串,请使用%[set_of_characters]
%[abcdefghijklmnopqrstuvwxyz]将读取任何小写字母和空格序列作为单个字符串。
%[^,!]将读取一个字符序列,直到找到逗号或感叹号,这将结束字符串输入。
^表示否定。