C++文件操作之eof函数问题_c++成员函数eof-程序员宅基地

技术标签: c++  编译器  C++学习笔记  


关于eof函数


      fstream / ifstream / ofstream 类中的 成员函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。原型是int eof();


      在使用这个函数时,如执行下面代码:

#include <iostream>
#include <fstream>
using namespace std;

int main(){
	ofstream fileOut;
	ifstream fileIn;

	fileOut.open("testFile");
	for(int i = 0; i < 5; i++)
		fileOut<<i;
	fileOut.close();

	fileIn.open("testFile");
	while(!fileIn.eof()){
		int i;
		fileIn>>i;
		cout<<i<<"\t";
	}
	cout<<endl;
	fileIn.close();	

}

    如上代码输出的是   0   1   2   3   4


   而对于下面代码

#include <iostream>
#include <fstream>
using namespace std;

int main(){
	ofstream fileOut;
	ifstream fileIn;

	fileOut.open("testFile");
	for(int i = 0; i < 5; i++)
		fileOut.write((char*)(&i),sizeof(i));
	fileOut.close();

	fileIn.open("testFile");
	while(!fileIn.eof()){
		int i;
		fileIn.read((char*)(&i), sizeof(i));
		cout<<i<<"\t";
	}
	cout<<endl;
	fileIn.close();
}

     输出的结果则是  0    1    2    3    4    4

    

     从网上查阅关于eof函数的一些说法中,有如下这种说法:

    eof()返回true的条件是“读到文件结束符”,而不是文件内容的最后一个字符。“文件结束符”不是指文件最后的字符,而是文件最后的字符的下一位。

   

     对于上面一段代码,i是以文本形式输入文件也是以文本形式读取文件,每一个int在输进去文件是是以char或是char[ ]形式输入的,读入时则是以char形式读入,文件以迭代方式读入char并输入屏幕显示,其实到最后文件也有读入最后所谓的“文件结束符”,“文件结束符”是一个不可显示字符,因为“文件结束符”实际上的值为-1。 我们知道在ASCII代码值的范围是0~255,不可能出现-1。。

    而对于下一段代码,i是以二进制形式输入文件的也是以二进制形式读取文件的,每一个int在输入文件时是以int形式输入,在读取时也是以int形式读入。知道int所占字节是4,而char所占字节是1。当读完文件中所有的int时,读到最后的“文件结束符”时,只剩下1字节,和

fileIn.read((char*)(&i), sizeof(i));

    中的sizeof(i)不符,这时编译器会重复上一个sizeof(i)的数据并输出。所以最后输出会重复最后一个int。




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pear_zi/article/details/6917268

智能推荐

xshell不显示vim配色_xshell的vi配色没有了-程序员宅基地

文章浏览阅读7.1k次,点赞3次,收藏4次。xshell连接linux默认的是8色的,一进去就看到像这样子,在vim配好的代码高亮,自定义主题都没效果了。 解决办法 在vim的配置里面一般是.vimrc添加一个设置set t_Co=256这样就可以了_xshell的vi配色没有了

C++sort函数使用(成绩排名)_c++成绩学生名字字典序降序排序-程序员宅基地

文章浏览阅读2.3k次。需求:使用sort实现先按照成绩降序排名,如果名次相同则按照姓名按照字典序从小到大,实现排名。分析:第一种方式给出将名次作为结构体的一个属性,第二种方式则直接输出#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;struct Student{ char name[10]; int score; int mingci;}stus[5];bool cmp(S_c++成绩学生名字字典序降序排序

多视图几何学(Multiple View Geometry)读书笔记目录-程序员宅基地

文章浏览阅读5.9k次,点赞14次,收藏87次。##关于这个系列《计算机视觉中的多视图几何》是计算机视觉、三维重建的基础,但是由于它涉及的内容较多,英语术语也很多,初学者看起来往往感到吃力,我也是第二次看这本书才搞清楚其中的一些东西。于是整理阅读过程中的一些笔记,加深自己的理解。但是由于笔者整理过程中有时思路上的偏差,导致一开始成文顺序不是特别明朗,而CSDN貌似又没有博文的排序功能,故在此进行索引,标注出正确的顺序。欢迎指正。...

【JAVA实现】基于欧几里得度量的相似度计算_java欧几里得相似度算法-程序员宅基地

文章浏览阅读6.4k次,点赞2次,收藏16次。前文讲了基于皮尔逊相关系数的相似度计算方法,这次介绍一个更加简单的相似度计算算法——欧几里得度量。 算法描述如下: 欧几里得度量定义欧几里得空间中,点x =(x1,...,xn)和 y =(y1,...,yn)之间的距离为 很简单吧,我也不多做描述了,直接贴代码。package euclideanMetric;/** * @auth_java欧几里得相似度算法

Paddle Lite新增ARM端图像预处理库_paddle arm-程序员宅基地

文章浏览阅读393次。Paddle Lite 是飞桨的端侧推理引擎,具有高性能、多硬件、轻量级的特点,它支持飞桨/TensorFlow/Caffe/ONNX等模型在ARM CPU, Mali GPU, Adreno GPU, Huawei NPU 等多种硬件上的推理部署,性能达到业内领先。目前Paddle Lite保持快速的迭代优化升级,距离正式版2.0.0发布仅一个月,Paddle Lite又一次发布了2.1..._paddle arm

28377D芯片CLA模块调试记录(1)_dsp28377 cla 在线仿真-程序员宅基地

文章浏览阅读3.1k次。如果是在flash状态下需要通过代码从flash复制到ram#ifdef _FLASHmemcpy((uint32_t *)&Cla1funcsRunStart, (uint32_t *)&Cla1funcsLoadStart,(uint32_t)&Cla1funcsLoadSize);#endif //_FLASH初始化并等待CLA1ToCPUMsgRAMMem..._dsp28377 cla 在线仿真

随便推点

关于git rebase的操作解决 push时被拒绝,整体流程_git push rebase-程序员宅基地

文章浏览阅读8.6k次,点赞4次,收藏13次。git提交远程仓库常规的操作流程: git add . (.是提交所有已更改文件,也可以只提交一个文件,在add 后面写上添加修改文件的名字就可以了,如果想要放弃添加过的文件的话,使用 git checkout . 放弃本地所有的修改) git commit -m"XXX" git pull --rebase (主干分支) == git fetch + git rebase git push (自己的远程分支) 注意:使用git log --oneline --g._git push rebase

金融行业相关知识点整理_金融安全相关知识点csdn-程序员宅基地

文章浏览阅读910次。金融行业相关知识点整理开放式理财产品国有控股商业银行股份制商业银行非保本浮动收益SHIBOR标准化债权类资产封闭式基金开放式基金基金存续期有哪些因素影响基金存续期?理财产品和基金的区别整理一下日常工作中遇到的金融行业相关知识点,会将不太了解的名词解释整理在这个文档中,大部分是百度复制来的,小部分是自己整合的各渠道的知识,如有纰漏欢迎指正~开放式理财产品开放式理财产品,是指在每个法定工作日、规定的交易时间内,可以进行申购或赎回的理财产品。在投资过程中,如果想赎回资金,随时都可以。反之,如果想继续申购,也_金融安全相关知识点csdn

win10 mx450 安装anaconda3+cuda+cudnn+tensorflow2.1_mx450是不是就是支持cuda cudnn-程序员宅基地

文章浏览阅读6k次,点赞6次,收藏27次。电脑上没有python环境1anaconda3的下载,注意32位和64位的别选错了图形化界面安装,中间可以选择安装位置,路径中不能出现中文之后有一个Advance Options,如下图,默认不勾选第一个添加环境变量,就不要勾选了,待会儿手动添加就行了然后就安装好了配置环境变量将安装目录下的三个路径添加到path环境变量中,Anaconda路径(conda命令),scripts(python命令),Library\bin(anaconda管理的第三方包),三个都添加就可以在命_mx450是不是就是支持cuda cudnn

OpenStack之Nova分析——Nova Compute定时任务(一)_nova compute定时任务有哪些-程序员宅基地

文章浏览阅读2.5k次。我们在分析虚拟机的创建和Nova Scheduler调度算法中,其实已经涉及到了Nova Compute服务的一些内容,不过Nova Compute服务完成的工作要更多。这篇文章我们来详细的分析一下Nova Compute服务的一个重要内容——定时任务。在前面分析Nova Scheduler调度算法中,大家是否还记得在HostManager对象中有两个重要的变量:1. host_state_nova compute定时任务有哪些

什么是ASP.NET Core 2.0?ASP.NET Core 2.0如何跨平台?_.net core2.0跨平台-程序员宅基地

文章浏览阅读1.3k次。什么是ASP.NET Core 2.0 为什么要使用 ASP.NET Core?NET Core 刚发布的时候根据介绍就有点心里痒痒, 大概看了一下没敢付诸于行动, 现在2.0发布了一段时间了, 之前对其"不稳定"的顾虑也打消的差不多了,决定踏实的研究一下.至于为什么要使用core, 官方是这样说的:ASP.NET Core 是重新设计的 ASP.NET,更改了体系结构..._.net core2.0跨平台

Ubuntu 19.04 root 账户下解决声音问题_root 加入audio组-程序员宅基地

文章浏览阅读722次。前言:此文是转载国外社区的解决办法,如有需要登录请挂好VPN,安装完Ubuntu 19.04 后 因不满是普通用户所以想办法已经 root 了,但是登录后没有声音,解决办法如下。1,Ubuntu中文版 需要找到 (启动应用程序首选项)Ubuntu英文(startup)应用程序双击打开2,点击添加(add)会出现 添加应用程序框3,确认添加应用程序 有 名称(name) ,命令(comman..._root 加入audio组

推荐文章

热门文章

相关标签