8
votes

fgetc (): Est-ce suffisant pour simplement vérifier EOF?

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
}


1 commentaires

Vous avez besoin de parenthèses autour de l'affectation: tandis que ((ch = fgetc. (FP))! = EOF) , 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.


3 Réponses :


7
votes

Vous pouvez le vérifier avec FERROR (3), juste après le moment:

clearerr(fp);


1 commentaires

@Helper Méthode: Vous venez de citer cette énoncé très sur votre extrait de Manpage.



6
votes

boucle jusqu'à fgetc renvoie eof 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 ou Feof . Si vous ne vous souciez pas de pouvoir ignorer l'appel.

Notez qu'il est important de vérifier si vous vérifiez FEOF ou ferror , 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 échec. Normalement, vous devez utiliser Feof pour vérifier, et s'il renvoie False, concluez que la boucle s'est arrêtée en raison d'une nouvelle erreur.


0 commentaires

8
votes

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

Le nom de la macro suivant doit être défini comme une expression constante entière négative: EOF

Tant que vous stockez la valeur de retour dans un int et non un char , il suffit de vérifier eof Parce qu'il est garanti de ne pas représenter une valeur de caractère valide.


aussi, dans votre code, ceci: xxx

devrait être: < / p> xxx

Les parenthèses supplémentaires sont nécessaires car ! = a une priorité supérieure à celle = .


0 commentaires