C语言clearerr()函数:清除(复位)文件流的错误标识,并使文件结束标标识为0
头文件:#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为文件流指针。
【实例】下面的程序将在标准输入流上生成一个错误,然后清除,保证后续读写正确。
Write error: No error
Will input cause an error? nㄌ
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 ); } }运行结果:
Write error: No error
Will input cause an error? nㄌ