Comment utiliser des expressions du FOLKLORE à passer par un fichier texte en C?
J'ai un fichier texte qui contient des chaînes sur chaque ligne. Je veux incrémenter un numéro pour chaque ligne dans le fichier texte, mais quand il atteint la fin du fichier, il est évident qu'elle doit arrêter. J'ai essayé de faire quelques recherches sur des expressions du FOLKLORE, mais je ne pouvais pas vraiment comprendre comment l'utiliser correctement.
Je suppose que j'ai besoin d'une boucle while, mais je ne suis pas sûr de savoir comment faire.
Vous devez vous connecter pour publier un commentaire.
Comment vous détecter EOF dépend de ce que vous utilisez pour lire le flux:
Vérifier le résultat de l'appel de propositions pour la condition ci-dessus, puis d'appeler
feof()
de déterminer si le résultat est due à frapper expressions du FOLKLORE ou d'une autre erreur.À l'aide de
fgets()
:À l'aide de
fscanf()
:À l'aide de
fgetc()
:À l'aide de
fread()
:Remarque que la forme est la même pour tous: vérifiez le résultat de l'opération de lecture; en cas d'échec, puis vérifier les expressions du FOLKLORE. Vous verrez beaucoup d'exemples comme:
Ce formulaire ne fonctionne pas de la manière dont les gens pensent qu'il fait, parce que
feof()
ne reviendra pas vrai jusqu'à ce que après que vous avez essayé de lire au-delà de la fin du fichier. En conséquence, la boucle s'exécute une fois de trop, ce qui peut ou peut ne pas vous causer une certaine douleur.fscanf()
résultat sur les expressions du FOLKLORE ou de l'erreur :le nombre de succès conversions de moins que prévu" équivaut à une entrée “erreur” format de conversion des échecs. Pas un regroupement correct de l'OMI. Suggérer une autre colonne otoh, que c'est une fonction compliquée 2) vérification de l'orthographe 3) Suggèrent de “mauvais Code” commentaire surwhile(!feof(stream))
exemple.Une boucle C serait:
Pour l'instant, je ne serais pas
feof
et des fonctions similaires. Exprience montre que c'est trop facile de faire appel au mauvais moment et le processus deux fois la même chose dans la croyance que les expressions du folklore n'a pas encore été atteint.Piège à éviter: à l'aide de
char
pour le type de c.getchar
renvoie le caractère suivant en fonte pour uneunsigned char
et puis à unint
. Cela signifie que, sur la plupart [sain] plates-formes de la valeur deEOF
et valide "char
" valeurs enc
ne pas se chevauchent, de sorte que vous ne jamais accidentellement détecterEOF
pour un "normal"char
.#include
stdio.h.getchar
pouvez jamais chevauchement avecEOF
sur tout conforme plate-forme, car les caractères retournée pargetchar
sont dans la gamme deunsigned int
(donc non-négatif), etEOF
doit être négatif.feof
- en mon expérience, l'utilisation de cette fonction indique presque toujours un bug. Tester la valeur de retour de la plus récente saisie de l'appel de fonction est suffisante et correcte dans 99% des cas.getchar
mise en œuvre pour être conforme, il aurait à faire en sorte que l'unsigned caractère des valeurs supérieures àINT_MAX
sont soit mappé à une valeur inférieure àINT_MAX
ou complètement ignoré de cartographie pour les entiers négatifs serait non-conforme, puisqu'il ne serait pas "un nombre entier dans la plage deunsigned char
".Vous devriez vérifier les expressions du FOLKLORE après la lecture du fichier.