文章目录
- 1 函数原型
- 2 参数
- 3 返回值
- 4 比较
- 5 示例
- 5.1 示例1
- 5.2 示例2
1 函数原型
fscanf():从指定流stream读取格式化输入,函数原型如下:
int fscanf(FILE *stream, const char *format, ...)
2 参数
fscanf()函数参数包括三部分:
- 参数stream是一个指向FILE类型结构的指针;stream指定了fscanf()函数要读取的流,可以是文件流,也可以是标准输入流;当是文件流时,stream等于fopen()函数的返回值;当是标准输入流时,stream等于stdin;
- format :格式字符串,与scanf()函数一致;
- … : 参数列表,与scanf()函数一致。
3 返回值
fscanf()函数返回值类型为int型:
- 读文件成功,则返回成功读取的项数;
- 读文件失败,则返回EOF。
C语言标准描述如下:
1. Each of these functions returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned.
2. If an error occurs, or if the end of the file stream is reached before the first conversion, the return value is EOF for fscanf or WEOF for fwscanf.
4 比较
fscanf()函数和scanf()函数的工作原理类似,差异如下:
- fscanf()函数从指定流stream中获取输入;
- scanf()函数从标准输入流stdin中获取输入;
- 将fscanf()函数的参数stream指定为stdin,则fscanf()函数的功能和scanf()函数的功能完全相同。
5 示例
5.1 示例1
使用fscanf()函数读文件并打印,示例代码如下所示:
int main()
{
float f1 = 0.0;
float f2 = 0.0;
float f3 = 0.0;
float f4 = 0.0;
float f5 = 0.0;
FILE* fp;
if ((fp = fopen("1.txt", "r")) == NULL)
{
printf("Failed to open file\n");
exit(1);
}
int rt = fscanf(fp, "%f %f %f %f %f", &f1, &f2, &f3, &f4, &f5);
printf("f1 = %f\n", f1);
printf("f2 = %f\n", f2);
printf("f3 = %f\n", f3);
printf("f4 = %f\n", f4);
printf("f5 = %f\n", f5);
printf("rt = %d\n", rt);
return 0;
}
文件1.txt内容如下图所示:
代码运行结果如下图所示:
代码及运行结果分析:
- fscanf()函数从1.txt文件中读取浮点数,并赋值给float型变量f1、f2、f3、f4、f5;
- fscanf()函数返回值为rt=5表示成功读取并赋值的项的数量。
5.2 示例2
使用fscanf()函数读取空文件,代码运行结果如下图所示:
代码及运行结果分析:
- 因为文件为空,所scanf()第一次读取时首先读到文件结束符,所以返回EOF=-1。