关于feof()多读取一次的问题(还未解决)
2016-04-25 00:00
316 查看
在编写C语言学生信息管理系统时,想编写一个读取文本的小功能时意外遇到一个小问题。
http://blog.sina.com.cn/s/blog_705a5ff00101ab5d.html
void query()//读取文件 { FILE *P=fopen("E:\\practise\\a.txt","r");//以读的方式打开文件 char s[1024]={0};//分配一个空间 while(!feof(P)) { printf("%s",s);//打印出每行数据 fgets(s,sizeof(s),P);//读取下一行 } fclose(P); }
printf与fgets调换顺序出现不同的结果
原因
在读完文件的最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。这样就多执行了一次。现象
feof会无缘无故多执行一次,就是打印到最底层,最后一组数据,打印完没有及时结束,重新打印了一遍。上文已经修改百度:
while(条件),当条件是真时跳出循环,先判断后执行 对于feof()这个函数, 它是先读再判断是否到文件尾, 也就是说在它之前一定要读一次才能做出判断 `while(!feof(P))//这是对的 { printf("%s",s);//打印出每行数据 fgets(s,sizeof(s),P);//读取下一行 }` `while(!feof(P))//这是错的 { fgets(s,sizeof(s),P);//读取下一行 printf("%s",s);//打印出每行数据 }` */
参考以下资料
http://blog.csdn.net/daiyutage/article/details/8540932http://blog.sina.com.cn/s/blog_705a5ff00101ab5d.html
相关文章推荐
- javascript看视频笔记
- CSS语法
- js原型转载一
- js原型转载二
- js作用域链
- 包含JS交互的混淆出错
- 移动前端第一弹:viewport详解
- 从零开始学_JavaScript_系列(12)——jquery<2>(高度自适应,哈希地址及检测,单页面技术)
- 常使用的10个jQuery代码片段
- js中获取键盘事件
- d3js关于力导向图
- d3js关于弦图
- <pre>标签中指定字符串样式
- weblogic 更改为生产模式并且设置检查jsp 页面时间
- js判断是电脑或者平板或者手机
- Ext.core.DomHelper 可以透明地操作HTML或者DOM
- 定制EditText的样式
- Windows 7 Professional Product Key Free for You
- jQuery判断select选中
- jQuery基本操作