c++文件读写函数eof()会错误的问题
问题描述:
当用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()会错误的问题相关推荐
- c语言文件写入函数有哪些,c语言文件读写函数有哪些?
c语言文件读写函数有:"fgetc"和"fputc"(字符读写函数)."fgets"和"fputs"(字符串读写函数). ...
- 教你如何运用python实现简单文件读写函数
这篇文章主要为大家详细介绍了python实现简单文件读写函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 python作为脚本性语言,加上它的简便易用性.会经常当作脚 ...
- 写文件函数 Linux C fwrite,C文件读写函数介绍(转)
1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此 ...
- C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind...
由于最近经常使用到c语言中的读写文件,所以在此总结以下,方便以后查找. 在c中,文件操作都是由库函数来实现的,主要是分为读和写两种操作,以下详细讲解以下所有有关文件操作的邯郸乎的用法: //C++写入 ...
- php打开文件读写函数,php中常用文件操作读写函数介绍
本文章介绍了下面几个常用的文件操作函数 file_get_contents 读取整个文件内容 fopen 创建和打开文件 fclose 关闭文件 fgets 读取文件一行内容 file_exists ...
- matlab读文件函数程序,Matlab 文件读写函数
MATLAB中的文件 m文件: 命令行方式程序可读性差,而且不能存储,对于复杂的问题,应编写成能存储的程序文件.包含matlab语言代码的文件称为m文件,其扩展名为m. 用户如想灵活应用matlab去 ...
- C语言文件读写函数总结
一.字符读写 1.字符写入文件函数 fputc fputc函数的原型如下:int fputc( int c, FILE *fp );参数说明:其中,c是要写入的字节,它虽被定义为整型,但只使用最低位的 ...
- c语言创建一个文件函数,c语言文件读写函数 用C语言的函数创建、打开和读写文件...
C语言文件读写结构体里面的数据怎样存到磁盘文件上 c语言对同一个文件进行读写(r+) 编写程序,将文本文件c.txt中的所有小写字母转换成相应的大写字母,其他一.标准文件的读写 1.文件的打开 fop ...
- fopen等文件读写函数
fopen() 函数: FILE *fopen(const char *filename, const char *mode) https://www.runoob.com/cprogramming/ ...
最新文章
- forward declaration of class 错误
- centeros /redhate密码破解
- Java8新特性:接口的默认方法与接口的静态方法
- python123添加列表元素_Python之列表
- HashMap原理解析
- 关于TTThumbsViewController加载更多
- gradle 区分系统_Android 学习记录_系统结构, res 目录, App 目录下的 build.gradle 文件...
- 如何在CDSN打开Markdown编辑界面
- win7设置计算机共享的打印机共享的打印机共享,win7,xp打印机共享设置软件 一键共享...
- LP3667B反激式开关电源5W(5V1A)输出电路
- qunee for html5,Qunee for HTML5(二)
- kafka和flink的动态扩容
- 解决visio对象在word中显示不全的问题
- python对excel操作简书_python Excel 写
- 链传动运动仿真(motion分析)制作包含源文件
- JAVA高级---(2)15分钟入门JVM底层原理
- 某缓存系统采用LRU淘汰算法,假定缓存容量为4,并且初始为空,那么在顺序访问以下数据项的时候,1、5、1、3、5、2、4、1、2,出现缓存直接命中的次数是(),最后缓存中即将准备淘汰的数据项是()
- vscode保存卡顿,显示正在从“‘Vetur‘, ‘ESLint‘”获取代码操作([配置]
- framebuffer之overview/双缓冲/alpha与colorkey/窗口平移与virtual screen平移
- php http 缓存,HTTP 缓存中的 Vary
热门文章
- java计算机毕业设计健康食谱系统服务器端源码+mysql数据库+系统+lw文档+部署
- [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)
- LocalDateTime类获取当日00:00与当月第一天
- 黑科技:WiFi霸屏神器,线下高效引流解决方案
- blr:expression(this.onFocus=this.blur())
- 【Vue】method间互相调用
- OpenJudge_P8207 和为给定数
- Android NDK 开发环境搭建(二)----来源http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.htm
- Tomcat 介绍与使用
- 卡特兰数(卡塔兰数)