int sscanf(const char *str, const char *format, ...)
描述 (Description)
C库函数int sscanf(const char *str, const char *format, ...)从字符串中读取格式化的输入。
声明 (Declaration)
以下是sscanf()函数的声明。
int sscanf(const char *str, const char *format, ...)
参数 (Parameters)
str - 这是函数处理的C字符串,用于检索数据。
format - 这是包含以下一项或多项的C字符串: Whitespace character, Non-whitespace character and Format specifiers
格式说明符遵循此原型:[=%[*] [width] [modifiers] type =]
Sr.No. | 论点和描述 |
---|---|
1 | * 这是一个可选的起始星号,表示要从流中读取数据但忽略该数据,即它不存储在相应的参数中。 |
2 | width 这指定了当前读取操作中要读取的最大字符数。 |
3 | modifiers 指定不同于int的大小(在d,i和n的情况下),unsigned int(在o,u和x的情况下)或float(在e,f和g的情况下)指向的数据相应的附加参数:h:short int(对于d,i和n),或unsigned short int(对于o,u和x)l:long int(对于d,i和n),或unsigned long int(对于o, u和x),或加倍(对于e,f和g)L:长双(对于e,f和g) |
4 | type 一个字符,指定要读取的数据类型以及预期读取的方式。 见下表。 |
fscanf类型说明符
类型 | 合格的输入 | 参数类型 |
---|---|---|
c | 单个字符:读取下一个字符。 如果指定的宽度不同于1,则该函数读取宽度字符并将它们存储在作为参数传递的数组的连续位置中。 最后不附加空字符。 | char * |
d | 十进制整数:数字可选地以+或 - 符号开头 | int * |
e, E, f, g, G | 浮点:包含小数点的十进制数字,可选地前面带有+或 - 符号,可选地后跟e或E字符和十进制数字。 有效条目的两个示例是-732.103和7.12e4 | float * |
o | 八进制整数: | int * |
s | 字符串。 这将读取后续字符,直到找到空格(空格字符被视为空白,换行符和制表符)。 | char * |
u | Unsigned decimal integer. | unsigned int * |
x, X | 十六进制整数 | int * |
other arguments - 此函数需要一系列指针作为附加参数,每个参数指向由格式字符串中相应的%-tag指定的类型的对象,顺序相同。
对于检索数据的格式字符串中的每个格式说明符,应指定其他参数。 如果要将sscanf操作的结果存储在常规变量上,则应在其标识符与引用运算符之前,即&符号(&),如:int n; sscanf(str,“%d”,&n);
返回值 (Return Value)
成功时,该函数返回填充的变量数。 如果在成功读取任何数据之前输入失败,则返回EOF。
例子 (Example)
以下示例显示了sscanf()函数的用法。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main () {
int day, year;
char weekday[20], month[20], dtm[100];
strcpy( dtm, "Saturday March 25 1989" );
sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year );
printf("%s %d, %d = %s\n", month, day, year, weekday );
return(0);
}
让我们编译并运行上面的程序,它将产生以下结果 -
March 25, 1989 = Saturday