c语言feof() 好奇怪 5C

第一幅图:用fgetc()再用feof(),最后一次fgetc()会返回EOF给char c 虽然没法打印显示出来,但在调试窗口可以看到-1。 所以除了回车符号一个读操作了11次。第二幅图(??):一共只读操作 了10次,调试时读取完最后一个数字9,下一句feof()就为真了,就结束了,咋就和第一幅图不一样,不多读一次了。
第一幅图:图片说明
第二幅图:图片说明

c

2个回答

第二图改为fscanf(fp,"%c",&a);应该就一样了。可以去了解下格式化IO用法。

weixin_41423378
银翼的魔术师s 搜了,没看到有个这个的解释呀
大约 2 年之前 回复
weixin_41423378
银翼的魔术师s 第二幅图调试的时候读完最后一个数据9之后feof就为真了,不应该再读一次吗。百度上的话:在读完文件的最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。这样就多执行了一次。
大约 2 年之前 回复

每一次都去操作都要判断feof, 因为你每一次读取都可能触发结尾标准,如果你理解这个就明白原因了

一旦有一次触碰到文件末尾,而你未做feof判断,你就可能使用上一次读取的值继续执行后续的代码了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问