C语言ferror()函数:检测文件流是否出错
头文件:#include <stdio.h>
ferror()用来检测文件流是否发生了错误,其原型为:
int ferror(FILE *stream);
【参数】stream为文件指针。
【返回值】若文件流出错则返回非0,否则返回0。
ferror()一般是为增强代码强健性加入的检验性程序,避免在文件操作时出现程序锁死或错误。
ferror()函数常与clearerr()函数一起使用,如果ferror(fp)发现错误,返回一个非0值,那么调用clearerr(fp)后,ferror(fp)的值变为0。
【实例】以只读方式打开一个文件,读取文件内容,检测是否出错。
0
Error form reading file.
Error has been cleared.
程序以只写方式打开一个文件,写入一部分数据, 然后使用fscanf函数读取文件流中的数据,紧接着使用ferror函数检测出错,使用dearen()函数将错误清除。
注意:有网友问关于ferror()返回非0值的含义,但是C语言标准并未对此进行说明,或者笔者没有找到。如果您有更完善的资料,请留言说明,非常感谢。
ferror()用来检测文件流是否发生了错误,其原型为:
int ferror(FILE *stream);
【参数】stream为文件指针。
【返回值】若文件流出错则返回非0,否则返回0。
ferror()一般是为增强代码强健性加入的检验性程序,避免在文件操作时出现程序锁死或错误。
ferror()函数常与clearerr()函数一起使用,如果ferror(fp)发现错误,返回一个非0值,那么调用clearerr(fp)后,ferror(fp)的值变为0。
【实例】以只读方式打开一个文件,读取文件内容,检测是否出错。
#include<iostream.h> #include<stdio.h> void main(void) { FILE* stream; char s[81]; stream = fopen("fscanf.txt","w"); if(stream == NULL)/*流为空*/ { printf("the file is opeaned error!\n"); } else { fprintf(stream,"%s %ld %f %c","a_string",6500,3.1415,'x'); fseek(stream,0L,SEEK_SET); fscanf(stream,"%s",s); printf("%ld\n",ftell(stream)); if(ferror(stream)) /*判断是否读取出错*/ { printf("Error form reading file.\n"); } if(ferror(stream))/*清楚错误信息*/ { clearerr(stream); printf("Error has been cleared.\n"); } if(ferror(stream))/*再次检查是否还有错误信息*/ { printf("Error form reading file.\n"); } fclose(stream); } }运行结果:
0
Error form reading file.
Error has been cleared.
程序以只写方式打开一个文件,写入一部分数据, 然后使用fscanf函数读取文件流中的数据,紧接着使用ferror函数检测出错,使用dearen()函数将错误清除。
注意:有网友问关于ferror()返回非0值的含义,但是C语言标准并未对此进行说明,或者笔者没有找到。如果您有更完善的资料,请留言说明,非常感谢。