头文件:#include <stdio.h>
clearerr()函数用来清除(复位)文件流的错误标志位,并使文件结束标志位为0。
错误标志一旦出现,就一直保留,影响后续文件的操作,直到对同一文件调用clearerr()函数或rewind()函数,或任何一个输入输出函数。
关于标志位的知识请参考:C语言FILE结构体以及缓冲区深入探讨
clearerr()函数常与ferror()函数一起使用,如果ferror(fp)发现错误,返回一个非0值,那么调用clearerr(fp)后,ferror(fp)的值变为0。
clearerr()函数原型为:
void clearerr(FILE * stream);
【参数】stream为文件流指针。
【实例】下面的程序将在标准输入流上生成一个错误,然后清除,保证后续读写正确。
#include <stdio.h>
void main( void )
{
int c;
// 向stdin写入数据时会产生错误
putc( 'c', stdin );
if( ferror( stdin ) )
{
perror( "Write error" );
clearerr( stdin );
}
// 检测读操作是否有错
printf( "Will input cause an error? " );
c = getc( stdin );
if( ferror( stdin ) )
{
perror( "Read error" );
clearerr( stdin );
}
}
运行结果: