clearerr()函数
clearerr()函数的作用是清除错误标志和文件结束标志,该函数的声明如下所示:
void clearerr(FILE * stream);
上述函数声明中,参数stream表示一个文件指针。当输入或者输出到达文件末尾出现错误时,使用clearerr()函数清除错误指示状态。
接下来通过一个具体案例来学习一下clearerr()函数的使用,首先在项目根目录下新建文件clearerr.txt并输入itcast后保存,clearerr.txt文件内容如图1所示。
图1 clearerr.txt文件内容
接下来使用fputc()函数读取文件中的内容为例,演示clearerr ()函数的用法,如例1所示
例1 clearerrFile.c
1 #define _CRT_SECURE_NO_WARNINGS
2 #include <stdio.h>
3 int main()
4 {
5 FILE* fp;
6 fp = fopen("clearerr.txt", "r");
7 if (fp == NULL)
8 perror("文件打开失败");
9
10 fputc('A', fp);
11 if (ferror(fp))
12 {
13 perror("写入错误");
14 clearerr(fp);
15 }
16
17 fgetc(fp);
18 if (ferror(fp)==0)
19 printf("无读取错误");
20 fclose(fp);
21 return 0;
22 }
例1运行结果如图2所示。
图2 例1运行结果
在例1中,第6行代码只读方式打开clearerr.txt文件,在写入文件时进行错误检测并提示写入错误,第14行代码使用clearerr()函数清除写入错误,第18行代码在读取文件后进行错误检查,ferror()函数返回值为0,提示无读取错误。由图2可知,通过clearerr()函数成功清除了写入错误,程序正常往后执行,输出了“无读取错误”信息。
若注释掉第14行代码,则第2次ferror()错误检查返回非0值,不会输出无读取错误。