int fscanf(FILE *stream, const char *format, ...)
描述 (Description)
C库函数int fscanf(FILE *stream, const char *format, ...)从流中读取格式化输入。
声明 (Declaration)
以下是fscanf()函数的声明。
int fscanf(FILE *stream, const char *format, ...)
参数 (Parameters)
stream - 这是指向标识流的FILE对象的指针。
format - 这是包含以下一项或多项的C字符串 - Whitespace character, Non-whitespace character和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 * |
additional arguments - 根据格式字符串,该函数可能需要一系列附加参数,每个参数包含一个要插入的值,而不是format参数中指定的每个%-tag(如果有)。 这些参数的数量应与期望值的%-tags数相同。
返回值 (Return Value)
此函数返回成功匹配和分配的输入项的数量,可以少于提供的数量,或者在早期匹配失败时甚至为零。
例子 (Example)
以下示例显示了fscanf()函数的用法。
#include <stdio.h>
#include <stdlib.h>
int main () {
char str1[10], str2[10], str3[10];
int year;
FILE * fp;
fp = fopen ("file.txt", "w+");
fputs("We are in 2012", fp);
rewind(fp);
fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
printf("Read String1 |%s|\n", str1 );
printf("Read String2 |%s|\n", str2 );
printf("Read String3 |%s|\n", str3 );
printf("Read Integer |%d|\n", year );
fclose(fp);
return(0);
}
让我们编译并运行上面的程序,它将产生以下结果 -
Read String1 |We|
Read String2 |are|
Read String3 |in|
Read Integer |2012|