c++如何判断文件末尾
int haoma;
while(!f1.eof())
{
f1>>haoma;
cout<<haoma;
}
f1.close();
结果是:12345631233莫名其妙多了一个3 很郁闷,不知道那位高手能够帮忙解决以下哦???? 展开
使用标准库函数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
while(1)
{
f1>>haoma;
if ( f1.eof()) break; // 如果不在这里检查,当上一句已经读到EOF,则下面一句 会继续 输出haoma,而haoma里的值恰恰是文件里最后一个数据,所以你多了1个3。
cout<<haoma;
}
c有一套f开头的系列函数操作文件。
打开"c:\1.txt"文件:FILE *f = fopen("c:\1.txt", "wb");
读取200个字节:char buf[1024]; fopen(buf, 200,1,f);
判断文件是否到头 if(feof(f))//文件到头为true
文件到头,关闭文件:fclose(f);
int haoma;
while(f1>>haoma)
{
cout<<haoma;
}
f1.close();
个人理解:
EOF是-1,因为二进制文件中也可包含-1,所以当文件读到文件末尾的时候并不知道已经到末尾,当读到末尾之后,才会知道读取已经结束
int n;
while(cin>>n)cout<<n;