fscanf()函数是C语言的文件格式读取功能. 它使用空格,制表符和回车符来分隔不同的单词,使用起来更方便. 在C语言文件格式的读写功能中: fprintf和fscanf我们介绍fscanf函数并给出示例程序,本文还将在此程序的基础上进行解释.
在示例程序中,我们定义了一个学生的结构类型,用于保存学生的信息(三门课程的学生人数,姓名和成绩),并将其写入文件,如下所示:
1个letuknowit 89.000000 87.000000 88.000000
每个部分都由空白隔开,因此我们可以使用fscanf()函数分别读取学生结构的每个成员. 毫无疑问,这是没有问题的,但是总会有事故发生. 如果学生姓名中有空格,则将很困难,例如,它看起来像这样:
1个letuknowit博客89.000000 87.000000 88.000000
这时,根据我们以前的阅读方法,将出现问题. 您会发现所有读取的学生成绩都是错误的. 错误的原因是letuknowit和博客之间的空间. 那么如何解决这个问题呢?看下面的代码:
C语言: 蚂蚁博客
#include“ stdio.h”
结构学生
{
char chName [20]; //名称
int nID; //学生编号
float fScores [3]; // 3门课程的成绩
};
void main()
{
FILE * pRead;
构造学生tStu;
pRead = fopen(“ stu_scores.txt”,“ r”);
如果(NULL == pRead)
{
返回;
}
//从文件中读取数据(&在下面的主要参数中)
fscanf(pRead,“%d%[^ 0-9]%f%f%f \ n”,&tStu.nID,tStu.chName,&tStu.fScores [0],&tStu.fScores [1 ]&tStu .fScores [2]);
fclose(pRead);
///将读取的数据打印到屏幕上
printf(“%d%s%.1f%.1f%.1f \ n”,tStu.nID,tStu.chName,tStu.fScores [0],tStu.fScores [1],tStu.fScores [2 ]);
}
与上一篇文章的代码进行比较,您会发现原来的%s已变成%[^ 0-9]. 您只需要更改这一点. 蚂蚁会解释为什么要修改它. 然后我们要谈谈fscanf函数的格式字符串.
[]读取数据,但仅允许在括号中输入字符. 例如,[0-9]仅允许读取0-9之间的数字.
[^]读取数据c语言fscanf返回-1,但不允许括号中的^符号后面的字符,例如[^ 0-9]表示不允许读取0-9的数字.
因此,当我们读入上面的学生姓名时c语言fscanf返回-1,我们将一路阅读(空格仍会读),并在遇到数字后停下来,这样我们就可以正确阅读letuknowit博客名称,并在以后阅读成绩.
每个人都在这里看到问题. 名称中不能包含数字,否则仍会发生错误. 目前,您只能考虑将名称部分放在末尾才能阅读. 将其调整为以下形式:
p>
1 89.000000 87.000000 88.000000 letuknowit博客
然后将参数修改为“%d%[^ \ n]%f%f%f \ n”以进行读取. 蚂蚁建议fscanf不应用于读取空格字符串. 可以使用Fgets函数.
请指出原始文章已在Zhizhi Blog(本文地址)上转载:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-151585-1.html