1. 为什么需要fscanf函数?
在C语言文件操作中,我们经常需要从文件中读取特定格式的数据。假设你有一个存储学生成绩的文本文件,内容如下:
code复制张三 95 87
李四 88 92
王五 76 85
如果直接用fgets读取整行再解析会很麻烦,而fscanf可以像scanf一样直接按格式读取:
c复制char name[20];
int math, english;
fscanf(file, "%s %d %d", name, &math, &english);
fscanf的强大之处在于它能根据格式字符串自动解析数据,省去了手动拆解字符串的麻烦。这在处理结构化数据文件(如CSV、日志等)时特别有用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. fscanf函数原型与参数详解
2.1 函数原型
c复制int fscanf(FILE *stream, const char *format, ...);
stream:文件指针,指向要读取的文件format:格式控制字符串...:可变参数列表,用于接收读取的数据
2.2 格式字符串详解
格式字符串由以下部分组成:
- 空白字符:匹配任意数量的空白字符(空格、制表符、换行等)
- 非空白字符:必须精确匹配输入中的字符
- 转换说明:以%开头,指定如何解释输入数据
常见转换说明符:
%d:读取十进制整数%f:读取浮点数%s:读取字符串(遇到空白停止)%c:读取单个字符%[chars]:匹配chars中的任意字符%[^chars]:匹配不在chars中的任意字符
注意:与scanf不同,fscanf从文件流读取而非标准输入,但格式字符串用法完全相同
3. 典型使用场景与代码示例
3.1 读取结构化数据文件
假设有员工数据文件employees.txt:
code复制ID,Name,Salary
101,John Smith,5000.50
102,Jane Doe,6500.75
读取代码:
c复制FILE *fp = fopen("employees.txt", "r");
if (fp == NULL) {
perror("打开文件失败")
