b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

fscanf()函数用C语言读取空间的解决方案

电脑杂谈  发布时间:2020-03-25 09:01:36  来源:网络整理

小班语言数一数ppt_易佰丰 条码扫描 c#030101_c语言fscanf返回-1

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语言: 蚂蚁博客

易佰丰 条码扫描 c#030101_c语言fscanf返回-1_小班语言数一数ppt

#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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 杨景茹
        杨景茹

        好吧我也来加油了

      • 付春岭
        付春岭

        由于在关键时刻彰显神威

      • 狄焕
        狄焕

        让她为了求全三天打五次飞机

      热点图片
      拼命载入中...