fscanf() 语法
int fscanf( FILE* stream, const char* format, ... );
fscanf()
函数从文件流中读取数据,并将其存储到相应的变量中。
它定义在 <cstdio> 头文件中。
fscanf() 参数
stream
:要从中读取数据的输入文件流。format
:一个指向 null 终止的字符串的指针,指定如何读取输入。它包含以 % 开头的格式说明符。格式字符串包含以下部分
非空白字符
:除 % 外,每个字符都会从输入流中消耗一个相同的字符。如果流中的下一个字符不匹配,该函数可能会失败。空白字符
:所有连续的空白字符都被视为单个空白字符。此外,'\n'、'\t' 和 ' ' 被认为是相同的。转换规范
:其格式如下- 初始 % 字符,指定开始
- 一个可选的 *,称为赋值抑制字符。如果存在此字符,fscanf() 不会将结果分配给任何接收参数。
- 一个可选的正整数,指定最大字段宽度。它指定了 fscanf() 在执行当前转换规范指定的转换时允许消耗的最大字符数。
- 一个可选的长度修饰符,指定接收参数的大小。
- 一个转换格式说明符。
格式说明符 描述 % 匹配字面量 % c 匹配单个字符或多个字符。如果定义了宽度,则匹配确切的宽度字符。 s 匹配连续的非空白字符。如果定义了宽度,则匹配确切的宽度字符,或直到找到第一个空白字符。 [set] 匹配给定字符集中非空字符序列。如果 ^ 出现在集合的开头,则匹配集合之外的所有字符。 d 匹配十进制整数。 i 匹配整数。 o 匹配无符号八进制整数。 X 或 x 匹配无符号十六进制整数。 u 匹配无符号十进制整数。 A 或 a, E 或 e, F 或 f, G 或 g 匹配浮点数。 n 返回到目前为止已读取的字符数。 p 匹配实现定义的、定义指针的字符序列。
%[*][width][length]specifier
- …:用于接收数据的其他附加参数。它们按照格式说明符的顺序出现。
fscanf() 返回值
- 如果成功,
fscanf()
函数将返回成功分配的接收参数的数量。 - 如果在第一个接收参数被分配之前发生匹配失败,则返回零。
- 如果在第一个接收参数被分配之前发生输入失败,则返回 EOF。
示例:fscanf() 函数的工作原理
#include <cstdio>
int main ()
{
FILE *fp;
char name[50];
int age;
fp = fopen("example.txt","w");
fprintf(fp, "%s %d", "Tim", 31);
fclose(fp);
fp = fopen("example.txt","r");
fscanf(fp, "%s %d", name, &age);
fclose(fp);
printf("Hello %s, You are %d years old\n", name, age);
return 0;
}
运行程序时,可能的输出是
Hello Tim, You are 31 years old
另请阅读