问题描述:

当用eof()函数判断文件有没有读完的时候,往往会多读一次。

问题如下所示,文件f2.dat里面只有10个数据。读出来11个,并且多输出一个不存在的数。

读数函数块:

    fstream fs( "f2.dat", ios::in | ios::out );if( !fs ){cout << "error" << endl;}int count = 0;int B[100];while( !fs.eof() ){fs >> B[count];count++;}

输出却是错误的,计数变量count = 11,而且多读出来一个不存在的数。

错误原因:

经过调试就可以发现,读完以后还会在执行一次,并不会跳出while循环,是eof()有问题吗?为什么再下一次就跳出了呢?原因是eof在读到文件有数据的地方最后一个字符后,eof判断文件并没有读完,还需要在读一个,没有读到东西,才会判断读完。

解决方法:

1,删除多余的控制符

2,尝试读一次

具体示例:

结束简单一点的 删除多余的控制符,如上图所示的文件中,光标处在最后一个文件的tab处,是因为向前面一样,每个数据用tab隔开,最后一个同样也有(换行符类似)

删除这个制表符或者换行符即可,文件读到最后一个数据的时候,eof就可以判断所要的结果,如下代码所示,写入的时候费点事情。

删除工作可以在写入文件的时候,判断一下,如果是最后一个数据了,那就不写入制表符或者换行符或者空格等,前面的控制符流会自动忽视。

void storage_file( )
{fstream fs("f2.dat", ios::out );if( !fs ){cout << "error" << endl;}for( int i = 0; i < 2; i ++ ){for( int j = 0; j < 5; j++ ){fs << i;if( j != 4 ){fs << "\t";}}if( i != 1 ){fs << endl;}}fs.close();
}

测试代码:

#include<iostream>
#include<fstream>
using namespace std;void storage_file( )
{fstream fs("f2.dat", ios::out );if( !fs ){cout << "error" << endl;}for( int i = 0; i < 2; i ++ ){for( int j = 0; j < 5; j++ ){fs << i;if( j != 4 ){fs << "\t";}}if( i != 1 ){fs << endl;}}fs.close();
}void Read_file( )
{fstream fs( "f2.dat", ios::in | ios::out );if( !fs ){cout << "error" << endl;}int count = 0;int B[100];while( !fs.eof() ){fs >> B[count];count++;}cout << "count == " << count << endl;for( int i = 1; i < count+1; i++ ){cout << B[i-1];if( i%5 == 0 ){cout << endl;}}fs.close();
}int main()
{//storage_file();Read_file();return 0;
}

好好学习,天天向上,一起努力呀

c++文件读写函数eof()会错误的问题相关推荐

  1. c语言文件写入函数有哪些,c语言文件读写函数有哪些?

    c语言文件读写函数有:"fgetc"和"fputc"(字符读写函数)."fgets"和"fputs"(字符串读写函数). ...

  2. 教你如何运用python实现简单文件读写函数

    这篇文章主要为大家详细介绍了python实现简单文件读写函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 python作为脚本性语言,加上它的简便易用性.会经常当作脚 ...

  3. 写文件函数 Linux C fwrite,C文件读写函数介绍(转)

    1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此 ...

  4. C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind...

    由于最近经常使用到c语言中的读写文件,所以在此总结以下,方便以后查找. 在c中,文件操作都是由库函数来实现的,主要是分为读和写两种操作,以下详细讲解以下所有有关文件操作的邯郸乎的用法: //C++写入 ...

  5. php打开文件读写函数,php中常用文件操作读写函数介绍

    本文章介绍了下面几个常用的文件操作函数 file_get_contents 读取整个文件内容 fopen 创建和打开文件 fclose 关闭文件 fgets 读取文件一行内容 file_exists ...

  6. matlab读文件函数程序,Matlab 文件读写函数

    MATLAB中的文件 m文件: 命令行方式程序可读性差,而且不能存储,对于复杂的问题,应编写成能存储的程序文件.包含matlab语言代码的文件称为m文件,其扩展名为m. 用户如想灵活应用matlab去 ...

  7. C语言文件读写函数总结

    一.字符读写 1.字符写入文件函数 fputc fputc函数的原型如下:int fputc( int c, FILE *fp );参数说明:其中,c是要写入的字节,它虽被定义为整型,但只使用最低位的 ...

  8. c语言创建一个文件函数,c语言文件读写函数 用C语言的函数创建、打开和读写文件...

    C语言文件读写结构体里面的数据怎样存到磁盘文件上 c语言对同一个文件进行读写(r+) 编写程序,将文本文件c.txt中的所有小写字母转换成相应的大写字母,其他一.标准文件的读写 1.文件的打开 fop ...

  9. fopen等文件读写函数

    fopen() 函数: FILE *fopen(const char *filename, const char *mode) https://www.runoob.com/cprogramming/ ...

最新文章

  1. forward declaration of class 错误
  2. centeros /redhate密码破解
  3. Java8新特性:接口的默认方法与接口的静态方法
  4. python123添加列表元素_Python之列表
  5. HashMap原理解析
  6. 关于TTThumbsViewController加载更多
  7. gradle 区分系统_Android 学习记录_系统结构, res 目录, App 目录下的 build.gradle 文件...
  8. 如何在CDSN打开Markdown编辑界面
  9. win7设置计算机共享的打印机共享的打印机共享,win7,xp打印机共享设置软件 一键共享...
  10. LP3667B反激式开关电源5W(5V1A)输出电路
  11. qunee for html5,Qunee for HTML5(二)
  12. kafka和flink的动态扩容
  13. 解决visio对象在word中显示不全的问题
  14. python对excel操作简书_python Excel 写
  15. 链传动运动仿真(motion分析)制作包含源文件
  16. JAVA高级---(2)15分钟入门JVM底层原理
  17. 某缓存系统采用LRU淘汰算法,假定缓存容量为4,并且初始为空,那么在顺序访问以下数据项的时候,1、5、1、3、5、2、4、1、2,出现缓存直接命中的次数是(),最后缓存中即将准备淘汰的数据项是()
  18. vscode保存卡顿,显示正在从“‘Vetur‘, ‘ESLint‘”获取代码操作([配置]
  19. framebuffer之overview/双缓冲/alpha与colorkey/窗口平移与virtual screen平移
  20. php http 缓存,HTTP 缓存中的 Vary

热门文章

  1. java计算机毕业设计健康食谱系统服务器端源码+mysql数据库+系统+lw文档+部署
  2. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)
  3. LocalDateTime类获取当日00:00与当月第一天
  4. 黑科技:WiFi霸屏神器,线下高效引流解决方案
  5. blr:expression(this.onFocus=this.blur())
  6. 【Vue】method间互相调用
  7. OpenJudge_P8207 和为给定数
  8. Android NDK 开发环境搭建(二)----来源http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.htm
  9. Tomcat 介绍与使用
  10. 卡特兰数(卡塔兰数)