feof 和ferror函数详解
【摘要】 大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流作者简介:CSDN C/C++领域新星创作者https://blog.csdn.net/chuxinchangcun?type=blog掘金LV3用户 https://juejin.cn/us...
大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN C/C++领域新星创作者https://blog.csdn.net/chuxinchangcun?type=blog
- 掘金LV3用户 https://juejin.cn/user/1381426159953960
- 阿里云社区专家博主,星级博主,技术博主 https://developer.aliyun.com/profile/expert/5lkdbuggiiuhc
- 华为云云享专家 https://bbs.huaweicloud.com/community/myhomepage
13.feof 和ferror
注意:feof不是用来判断文件是否读取结束的
在文件读取过程中,不能用feof函数或者ferror函数的返回值直接用来判断文件是否读取结束
feof和ferror的真正用途:当文件读取结束时,判断是读取失败导致的结束,还是遇到文件尾结束
判断文件读取是否结束:
- 判断返回值是否为EOF : fgetc函数
- 判断返回值是否为NULL: fgets函数
- 判断返回值是否小于实际要读取的个数:fread
feof-文件读取结束了,判断是不是遇到文件末尾而结束的
作用:判断文件是不是遇到文件末尾结束
返回值:
feof函数在第一次读操作后返回一个非零值,该操作试图读过文件的末尾。如果当前位置不是文件结束,则返回0。没有返回错误。 如果返回值不是0,说明就是遇到文件末尾结束的
ferror-文件读取结束了,判断是不是遇到错误后读取结束的
作用:判断文件是不是遇到错误结束
返回值
如果流上没有发生错误,则ferror返回0。否则,它将返回一个非零值。
文本文件的例子:
#include<stdio.h>
int main()
{
//打开文件
FILE* pf = fopen("test.txt","w");//以写的方式打开文件
if(NULL == pf)
{
//打开失败,打印错误原因
perror("fopen");
return -1;
}
//写文件
fputs("Mango",pf);
//关闭文件
fclose(pf);
//再次打开文件进行读取
fopen("test.txt","r");
int ch = 0;
//当fgetc读取失败的时候/遇到文件结束的时候,都会返回EOF
//注意:EOF -> 值为-1,ch的值要和EOF进行判断。ch最好写成int类型,防止报错,
//注意优先级问题,ch读取时应该要括号括起来
while((ch = fgetc(pf)) != EOF)
{
printf("%c ",ch);
}
//判断是什么原因结束的
if(ferror(pf))
{
printf("I/O error when reading\n");
}
else if(feof(pf))
{
printf("End of file reached successfully\n");
}
//关闭文件并置空
fclose(pf);
pf = NULL;
return 0;
}
执行结果
是遇到了文件末尾结束
二进制文件的例子
#include<stdio.h>
int main()
{
return 0;
}int main()
{
//存文件
FILE* pf = fopen("data.txt","wb");//以二进制写入形式打开文件
if(NULL == pf)
{
perror("fopen");
return -1;
}
int arr[4] = {3,4,5,6};
fwrite(arr,sizeof(arr[0]),4,pf);//把arr的数据以二进制形式写入到pf中
fclose(pf);
//后面要读取写入的数据,所以先不置空
//读取文件
pf = fopen("data.txt","rb");//以二进制读取形式打开文件
size_t tmp = 0; //fread的返回类型为size_t,反正报错
int a = 0;
//每次从流中读取1个数据到a,若返回值为1,说明成功读取,若小于1,则说明读取结束
while( ( tmp = fread(&a,sizeof(int),1,pf) == 1 ) )
{
printf("%d ",a);
}
//判断是什么原因结束的
if(ferror(pf))
{
printf("I/O error when reading\n");
}
else if(feof(pf))
{
printf("End of file reached successfully\n");
}
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)