c++如何判断文件末尾

今天写程序在一个txt文档里写了01020304050603010203几个数字,用一段代码输出:inthaoma;while(!f1.eof()){f1>>haoma;... 今天写程序在一个txt文档里写了01 02 03 04 05 06 03 01 02 03几个数字,用一段代码输出:
int haoma;
while(!f1.eof())
{
f1>>haoma;
cout<<haoma;
}
f1.close();
结果是:12345631233莫名其妙多了一个3 很郁闷,不知道那位高手能够帮忙解决以下哦????
展开
 我来答
八哥说科技
高粉答主

2020-02-25 · 分享科技资讯,共享科技生活
八哥说科技
采纳数:113 获赞数:78622

向TA提问 私信TA
展开全部

使用标准库函数feof()可判断是否到达文件结尾

用法: 

#include <stdio.h>

int feof(FILE *stream);

参数流 :FILE结构的指针。

功能:feof是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0值),文件结束符只能被clearerr()清除。

扩展资料:

注意事项:

1、feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。

2、feof()是先读文件在判断是不是到达文件结束,所以当使用feof()作为循环判断条件的话,就需要注意一种情况,就是当文件为空的时候,它也会读取一次文件内容然后再跳出循环,所以有可能会读取到一些不可知的内容出来。

参考资料来源:百度百科-feof

L_o_o_n_i_e
推荐于2017-09-08 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5222万
展开全部
EOF 的判断 应 紧接在 读语句 后面 进行。不应在输出语句 执行完后 下一论循环开始再检查。

while(1)
{
f1>>haoma;
if ( f1.eof()) break; // 如果不在这里检查,当上一句已经读到EOF,则下面一句 会继续 输出haoma,而haoma里的值恰恰是文件里最后一个数据,所以你多了1个3。
cout<<haoma;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MAGEHE
推荐于2017-09-14 · 超过19用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:47.2万
展开全部

c有一套f开头的系列函数操作文件。

  1. 打开"c:\1.txt"文件:FILE *f = fopen("c:\1.txt", "wb");

  2. 读取200个字节:char buf[1024]; fopen(buf, 200,1,f);

  3. 判断文件是否到头 if(feof(f))//文件到头为true

  4. 文件到头,关闭文件:fclose(f);

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hi_xjy
2010-11-09 · TA获得超过2468个赞
知道大有可为答主
回答量:987
采纳率:0%
帮助的人:1539万
展开全部
改成
int haoma;
while(f1>>haoma)
{
cout<<haoma;
}
f1.close();

个人理解:
EOF是-1,因为二进制文件中也可包含-1,所以当文件读到文件末尾的时候并不知道已经到末尾,当读到末尾之后,才会知道读取已经结束
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逸明鲸人
2010-11-09 · TA获得超过867个赞
知道小有建树答主
回答量:409
采纳率:100%
帮助的人:436万
展开全部
//可以保证以下程序的正确性
int n;
while(cin>>n)cout<<n;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式