dans divers exemples trouvés sur la bande fgetc.) code> est utilisé comme suit: FILE *fp = fopen(PATH, "r");
if (fp == NULL) {
perror("main");
exit(EXIT_FAILURE);
}
int ch;
while (ch = fgetc(fp) != EOF) {
// do something
}
3 Réponses :
Vous pouvez le vérifier avec FERROR (3), juste après le moment:
clearerr(fp);
@Helper Méthode: Vous venez de citer cette énoncé très sur votre extrait de Manpage.
boucle jusqu'à Notez qu'il est important de vérifier si vous vérifiez fgetc code> renvoie eof code> est parfaitement bien. Ensuite, si vous voulez savoir si la boucle est terminée en raison de la fin de la fin du fichier ou du fait d'une erreur, vous devez appeler ferror code> ou Feof code>. Si vous ne vous souciez pas de pouvoir ignorer l'appel. P>
FEOF code> ou ferror code>, car l'indicateur d'erreur d'un flux est collant et peut évaluer vrai même lorsque l'EOF était la cause de < Code> fgetc code> échec. Normalement, vous devez utiliser Feof code> pour vérifier, et s'il renvoie False, concluez que la boucle s'est arrêtée en raison d'une nouvelle erreur. P>
C'est ce que les spécifications disent:
La fonction Fgec () doit obtenir l'octet suivant comme un caractère non signé converti en int p>
Le nom de la macro suivant doit être défini comme une expression constante entière négative: EOF P> blockquote>
Tant que vous stockez la valeur de retour dans un
int code> et non unchar code>, il suffit de vérifiereof code > Parce qu'il est garanti de ne pas représenter une valeur de caractère valide. p>
aussi, dans votre code, ceci: p>
xxx pré> devrait être: < / p>
xxx pré> Les parenthèses supplémentaires sont nécessaires car
! = code> a une priorité supérieure à celle= p> p> p>.
Vous avez besoin de parenthèses autour de l'affectation:
tandis que ((ch = fgetc. (FP))! = EOF) code>, mais avec ce correctif en place, il suffit de vérifier juste EOF. Vous obtiendrez EOF sur une erreur ou une EOF réelle; Si vous voulez, vous pouvez désambiguez les deux cas après la boucle.