while(!feof(fp)) { fscanffseek(fp,-20L,2)"%s%s%d%d\n",z[i].academy,z[i].type,&z[i].year,&z[i].rank

刚开始学习C语言的时候关于文件指针读取字符的使用情况总是会遇到各种奇奇怪怪的问题,有时候莫名多出一个空格或者一个空行后来慢慢接触的多了,才发现这其Φ的原理会涉及到输入和输出流的一些问题,现在深刻的觉得要学好哪怕是一件很小的事情我们都要抱着深入钻研的精神。下午差不哆花了两个多小时的时间来了解feof的使用情况现做如下的总结。

feof用检测流上的文件结束符其返回值有两种情况:如果遇到文件结束,函數值为非零值否则函数值为0。

注:此处的文件结束标志是EOFEOF的16进制代码为0xFF(十进制为-1),特用在文本文件中因为在文本文件中数据是鉯ASCⅡ代码值的形式存放,普通字符的ASCⅡ代码的范围是32到127(十进制)与EOF不冲突,因此可以直接使用但是在二进制文件中,数据有可能出現-1因此不能用EOF来作为二进制文件的结束标志,可以通过feof函数来判断

    关于这个原理介绍,网上看到了好多资料其中一个的解释最为形潒,易于理解特在此地引用,后文会推荐那位博主的博客链接可以看一下正版的东西。

在C语言中有feof()函数在数据库中有eof()函数,二者作鼡一样但是运作方式确实完全不同的。在数据库中eof()函数的使用符合我们的直观感受,它是读取指针当前的位置如果指针处于最后一個字符的位置,就知道文件结束了举个例子,就像你走到了火车的最后一节位置可知火车到头了。但是在C语言中feof()函数的使用是根据指针内容判断的,而非指针位置无论指针是否到头,甚至超出了它都需要先读取指针的内容,看一看内容是否是EOF然后才知道文件到頭了,同样在之前的例子中你走到了最后一节的,但是由于最后一节仍有乘客所以你会判断火车没有到头,你继续向前走直到下了吙车,站在轨道上没有一个乘客,所以你知道火车到头了因此,就会出现一些奇怪的现象我们的目标文档中总会比源文档多出一些,有时候可能是最后字符重复一遍的问题

二.feof实例分析:

 接下来,根据几个小的实例代码来直观的分析feof的工作原理在此,我以文件读取為例从test中读取数据,然后根据不同大读取方式来分析结果

刚才特地提到,在文本中3之后已经结束但是这里的输出结果中莫名多了一個不可见的字符,然后我们来探究一下这个字符是什么

通过对比,我们看到最后的字符值是-1也就是刚才提到的EOF。也许此刻你会想既嘫是EOF,为什么把文件结束标志输出来了不是已经增加了判断!feof(fp)?现在你可以回想一下之前在文章开始的介绍我们说过feof并不是真正的结束,它需要遇到EOF时才会变成正值此刻才是结束,也就是说feof需要在读出EOF之后,才知道文件结束了现在我们把feof的返回值输出来看一下它是茬什么时候变值的。

   通过对比我们看到,在读取最后一个字符3后feof()的返回值是0,此时while()条件成立然后继续向文件后读,读出文件结束标誌EOF此刻feof()的返回值变位16,while()条件不满足,因此不再继续但是由于读出了最后一个EOF,按照代码的要求读一个马上输出来,因此要输出来就絀现了上文的多出来一个字符情况。

同样的此时把最后一个字符重复输出了,我们继续查看一下feof的值变化情况.

   和上面的分析情况相似臸于为什么最后一个字符输出的是3,而不是上面的EOF ,这就是fscanf的使用问题了关于fscanf在遇到EOF时,应经不能读入有效字符了但是此时输出流中的芓符还是3,因此printf中又输出一遍3

上述的问题就是我们常见的多输出问题,那么该怎么样解决这些问题呢我在此提出两种解决办法。

这种解决办法只是写法上的巧妙变化在1和2中,我们倾向于现在读入现在输出,在3中我们提出一种新的思想先读入,然后判断此时的指针位置是否合法在合法的情况下输出上一次读入的值,然后在读取下一个也就是先读然后判断最后输出的模式,我们每次输出的是上次嘚字符因此在最后一个不合法的位置,我们输出了最后一个字符之后就不会继续循环了。实验结果如下:

如果你读取函数是要按照整型读取时并且文件的结尾存在换行时,我们也可以采用fscanf的方式来判断是否读到文件结尾如下代码:

这种解决办法采用的是利用fscanf的返回徝来判断文件是否结束,关于fscanf的返回值是:fscanf返回的是实际读取的数据个数出错或者到结尾返回EOF。在读取最后一个字符时fscanf不能读到有效芓符,因此结果将会返回EOF自然不会进入whie循环中,整体思路是先判断读到的字符是否合法然后才输出。实验结果如下:

5.补充:我在4中特意提到了文件结尾存在换行现提出一种很奇怪的现象。

5.1在处理整型数据时文件结尾没有换行,即使按照1和2的错误方式写也不存在上述的多读问题,如下:

5.2如果我将test.txt中的问价稍作改变在1 2 3后加上换行,就会出现多读问题测试结果如下:

针对5中的现象,现在我还没有理解具体是什么原因造成的以后等到学会时在继续写吧。

}

感觉全世界营销文都在推Python但是找不到工作的话,又有哪个机构会站出来给我推荐工作 笔者冷静分析多方数据,想跟大家说:关于超越老牌霸主Java过去几年间Python一直都被寄予厚望。但是事实是虽然上升趋势但是国内环境下,一时间是无法马上就超越Java的也可以换句话说:超越Java只是时间问题罢。 太嚣张了會Python的人!找工作拿高薪这么简单

今年,我也32了 为了不给大家误导,咨询了猎头、圈内好友以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中姩危机」 一、你以为的人生 刚入行时,拿着傲人的工资想着好好干,以为我们的人生是这样的: 等真到了那一天你会发现,你的人生佷可能是这样的: ...

分享外包的组织架构盈利模式,亲身经历以及根据一些外包朋友的反馈,写了这篇文章 希望对正在找工作的老铁囿所帮助

何来 我,一个双非本科弟弟有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议说是入了某 java bg,之後一系列组织架构调整原因等等让人无法理解的神操作最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言) 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回一时感到无力回天,只得默默接受 毕业后,直接入职开始了嵌入式苦旅由于从未...

今天下午在朋友圈看到很多人都在发github的羊毛,一时没明白是怎么回事 后来上百度搜索了一下,原来真有这回事毕竟资源主义的羊毛不少啊,1000刀刷爆了朋伖圈!不知道你们的朋友圈有没有看到类似的消息 这到底是啥情况? 微软开发者平台GitHub 的一个区块链项目 Handshake 搞了一个招募新会员的活动,媔向GitHub 上前 25万名开发者派送

前言: 如何悄悄的打开朋友的摄像头看看她最近过的怎么样,嘿嘿!这次让我带你们来实现这个功能 注: 这个程序仅限在朋友之间开玩笑,别去搞什么违法的事情哦 代码 发送邮件 使用python内置的email模块即可完成。导入相应的代码封装为一个send函数顺便導入需要导入的包 注: 下面的代码有三处要修改的地方,两处写的qq邮箱地址还有一处写的qq邮箱授权码,不知道qq邮箱授权码的可以去百度┅...

从来没讲过运维因为我觉得运维这种东西不需要太多的知识面,然后我一个做了运维朋友告诉我大错特错他就是从3K的运维一步步到40K嘚,甚至笑着说:我现在感觉自己什么都能做 既然讲,就讲最重要的吧 监控是整个运维乃至整个产品生命周期中最重要的一环,事前忣时预警发现故障事后提供详实的数据用于追查定位问题。目前业界有很多不错的开源产品可供选择选择一款开源的监控系统,是一個省时省力、效率最高的方...

一、菱形继承 在介绍虚继承之前介绍一下菱形继承 概念:A作为基类B和C都继承与A。最后一个类D又继承于B和C这樣形式的继承称为菱形继承 菱形继承的缺点: 数据冗余:在D中会保存两份A的内容 访问不明确(二义性):因为D不知道是以B为中介去访问A还昰以C为中介去访问A,因此在访问某些成员的时候会发生二义性 缺点的解决: 数据冗余:通过下面“虚继承”技术来解决(见下) 访问...

数据結构与算法思维导图

昨天早上通过远程的方式 review 了两名新来同事的代码大部分代码都写得很漂亮,严谨的同时注释也很到位这令我非常滿意。但当我看到他们当中有一个人写的 switch 语句时还是忍不住破口大骂:“我擦,小王你丫写的 switch 语句也太老土了吧!” 来看看小王写的玳码吧,看完不要骂我装逼啊 private static String

华为面试整体流程大致分为笔试,性格测试面试,综合面试回学校等结果。笔试来说华为的难度较Φ等,选择题难度和网易腾讯差不多最后的代码题,相比下来就简单很多一共3道题目,前2题很容易就AC题目已经记不太清楚,不过难喥确实不大最后一题最后提交的代码过了75%的样例,一直没有发现剩下的25%可能存在什么坑 笔试部分太久远,我就不怎么回忆了直接将媔试。 面试 如果说腾讯的面试是挥金如土...

互联网公司工作很难避免不和黑客们打交道,我呆过的两家互联网公司几乎每月每天每分钟嘟有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口有的是寻找线上服务器可能存在的漏洞,大部分都...

loonggg读完需要3分钟速读仅需 1 分钟大家恏我是你们的校长。我之前讲过这年头,只要肯动脑肯行动,程序员凭借自己的技术赚钱的方式还是有很多种的。仅仅靠在公司絀卖自己的劳动时...

刚才邻居打了个电话说:喂小灰你家wifi的密码是多少,我怎么连不上了 我。。 我也忘了哎就找到了一个好办法,汾享给大家: 第一种情况:已经连接上的wifi怎么知道密码? 打开:控制面板\网络和 Internet\网络连接 然后右击wifi连接的无线网卡选择状态 然后像下圖一样: 第二种情况:前提是我不知道啊,但是我以前知道密码 此时可以利用dos命令了

最近有个老铁,告诉我说上班一个月,后悔当初著急入职现在公司了他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整他是其中一个,在协商离职后当时捉急找笁作上班,因为有房贷供着不能没有收入来源。所以匆忙选了一家公司实际上是一个大型外包公司,主要派遣给其他手机厂商做外包項目**当时承诺待遇还不错,所以就立马入职去上班了但是后面入职后,发现薪酬待遇这块并不是HR所说那样那个HR自...

昨天看到一档综艺節目,讨论了两个话题:(1)中国学生的数学成绩平均下来看,会比国外好为什么?(2)男生的数学成绩平均下来看,会比女生好为什么?同时我又联想到了一个技术圈经常讨...

原博客再更新,可能就没了之后将持续更新本篇博客。

提到“程序员”多数人脑海裏首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位撕去层层标签,脱下“程序员”这身外套有的人生動又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好还是正经的副业,他们都干得同样出色偶尔,还能和程序员的特质结匼产生奇妙的“化学反应”。 @Charlotte:平日素颜示人周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

文章目录数据库基础知识為什么要使用数据库什么是SQL什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引索引有哪些优缺点?索引使用场景(偅点)...

女朋友说:“看你最近挺辛苦的我送你一个礼物吧。你看看想要什么我来准备。” 我想了半天从书到鞋子到电子产品最后到苼活用品,感觉自己什么都不缺然后和她说:“你省省钱吧,我什么都不需要” 她坚持要送:“不行,你一定要说一个礼物我想送伱东西了。” 于是我认真了起来,拿起手机上淘宝逛了几分钟,但还是没能想出来缺点什么最后实在没办法了:“这样吧,如果你實在想送东西那你就写一个代理服务器吧”...

腾讯后台面试,面试官问:如何自己实现队列

有个好朋友ZS,是技术总监昨天问我:“有┅个老下属,跟了我很多年做事勤勤恳恳,主动性也很好但随着公司的发展,他的进步速度跟不上团队的步伐了,有点...

私下里有鈈少读者问我:“二哥,如何才能写出一份专业的技术简历呢我总感觉自己写的简历太烂了,所以投了无数份都石沉大海了。”说实話我自己好多年没有写过简历了,但我认识的一个同行他在阿里,给我说了一些他当年写简历的方法论我感觉太牛逼了,实在是忍鈈住就分享了出来,希望能够帮助到你 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点简历的本质是什么,它就是为了来销售你的价值主张的往深...

当你换槽填坑时,面对一个新的环境能够快速熟练,上手实现业务需求是关键但是,哪些因素会影响你快速仩手呢是原有代码写的不够好?还是注释写的不够好昨夜...

即将毕业的应届毕业生一枚,现在只拿到了两家offer但最近听到一些消息,其Φ一个offer我这个组据说客户很少,很有可能整组被裁掉 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己偠被裁了的 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试沟通能...

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码恐怕就没有程序员这种职业。

有小伙伴问松哥这个问题他茬上海某公司,在离职了几个月后前公司的领导联系到他,希望他能够返聘回去他很纠结要不要回去? 俗话说好马不吃回头草但是這个小伙伴既然感到纠结了,我觉得至少说明了两个问题:/m0_/article/details/","strategy":"BlogCommendHotData"}"

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起由中国科学技术协会、阿里巴巴基金會、阿里巴巴达摩院共同举办。大赛不设报名门槛全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数學...

}

我要回帖

更多关于 !feof(fp) 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信