A função clearerr limpa o indicador de EOF e o indicador de erro do fluxo.
void clearerr (FILE * fluxo);
fluxo - Fluxo a ter o indicador de EOF e o indicador de erro limpo.
Nenhum.
Esse programa abre um arquivo em modo somente escrita e tenta ler dele utilizando a função fgetc. Naturalmente, a leitura falha. O indicador de erro é setado e pode ser verificado utilizando ferror. Após limparmos o indicador de erro utilizando clearerr, o if não é executado novamente, pois ferror agora retorna falso; apenas o primeiro if entra em ação.
#include <stdio.h>
int main() {
FILE *arquivo;
char c;
arquivo = fopen("arquivo.txt", "w");
if(arquivo == NULL) {
fprintf(stdderr, "Erro ao abrir o arquivo.txt\n");
return 1;
}
c = fgetc(fp);
if(ferror(arquivo)) {
fprintf(stderr, "Erro ao ler do arquivo.txt\n");
}
/* limpa o indicador de erro */
clearerr(arquivo);
if(ferror(arquivo)) {
fprintf(stderr, "Erro ao ler do arquivo.txt\n");
}
fclose(arquivo);
return 0;
}
ferror função