2.8 KiB
C 语言中的fscanf()函数
原文:https://overiq.com/c-programming-101/fscanf-function-in-c/
最后更新于 2020 年 7 月 27 日
该函数的语法是:
语法: int fscanf(FILE *fp, const char *format [, argument, ...] );
fscanf()功能用于从文件中读取格式化的输入。它的工作原理与scanf()功能类似,但它不是从标准输入中读取数据,而是从文件中读取数据。事实上,fscanf()函数的大多数参数与scanf()函数相同,只是它需要一个额外的参数,显然足够一个文件指针。成功时,此函数返回读取的值的数量,出错时或文件结束时,它返回EOF或-1。
下面的程序演示了如何使用fscanf()函数从文件中读取格式化数据。
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char name[50];
int roll_no, chars;
float marks;
fp = fopen("records.txt", "r");
if(fp == NULL)
{
printf("Error opening file\n");
exit(1);
}
printf("Testing fscanf() function: \n\n");
printf("Name:\t\tRoll\t\tMarks\n");
while( fscanf(fp, "Name: %s\t\tRoll no: %d\t\tMarks: %f\n"
, name, &roll_no, &marks) != EOF )
{
printf("%s\t\t%d\t\t%.2f\n", name, roll_no ,marks);
}
fclose(fp);
return 0;
}
预期输出:
Name: Tina Roll no: 1 Marks: 45.00
Name: Nina Roll no: 5 Marks: 89.00
Name: Tim Roll no: 2 Marks: 49.00
Name: Jim Roll no: 8 Marks: 41.00
Name: King Roll no: 9 Marks: 59.00
工作原理:
在第 6 行中,声明了类型为struct FILE的结构指针fp。
在第 7 行中,声明了一个大小为 50 的字符名称数组。
在第 8 行,声明了两个 int 变量 roll_no 和 chars。
在第 9 行中,声明了 float 类型的变量标记。
在第 11 行,fopen()函数用两个参数调用,即“records.txt”和“r”。成功后,它返回一个指向文件 records.txt 的指针,并以只读模式打开文件 records.txt。失败时,它返回空值。
在第 13-17 行,if 语句用于测试 fp 的值。如果为空,printf()语句将打印错误消息,程序终止。否则,程序继续执行 if 语句后面的语句。
在第 19 行和第 20 行,我们有两个 printf()语句,将“Testing fscanf()函数:\n\n”和“Name:\ t \ tRoll \ t \ t 说明\n”打印到控制台。
在第 22-26 行中,while 循环与 fscanf()函数一起用来读取文件中的格式化数据,并将它们存储在变量名 roll_no 和 marks 中。printf()语句然后被用户用来打印从文件中读取的数据。fscanf()一直读取,直到遇到 EOF。当条件变为假并且控制脱离循环时,遇到文件结尾。
在第 28 行,调用 fclose()函数关闭文件。