Lecture de fichiers texte en fichiers jusqu'à ce que EOF en utilisant fgets dans C
quelle est la bonne manière de lire un fichier texte jusqu'à ce que EOF en utilisant fgets en C? Maintenant, j'ai ce (simplifié):
char line[100 + 1];
while (fgets(line, sizeof(line), tsin) != NULL) { //tsin is FILE* input
... //doing stuff with line
}
Plus précisément, je me demandais si il devrait y avoir quelque chose d'autre que le tout-état? L'analyse à partir du fichier texte à la "ligne" qui doivent être réalisés dans le tout-état?
- L'analyse doit être effectuée dans la boucle while ou je suppose que vous pourriez stocker chaque ligne dans un tableau ou quelque chose et ensuite faire votre analyse après la boucle while. Fermez le fichier lorsque vous avez terminé avec elle aussi
- C'est 100% OK, vous pourriez même juste faire
while (fgets(line, sizeof(line), tsin)) {...}
et laissez-le retour defgets
servir le test en lui-même. (un pointeur valide permettra de testertrue
etNULL
permettra de testerfalse
) - Je pense que vous êtes en train de faire, la réponse de la laisser sortir != NUL n'ajoute pas de valeur.
Vous devez vous connecter pour publier un commentaire.
Selon la référence
Afin de vérifier la valeur retournée si elle est
NULL
est assez. Aussi l'analyse va dans le tout-corps.Ce que vous avez fait, c'est 100% OK, mais vous pouvez aussi simplement compter sur le retour de
fgets
que le test lui-même, par exemple,Pourquoi?
fgets
retournera un pointeur surline
en cas de succès, ouNULL
en cas d'échec (pour quelque raison que ce soit). Un pointeur valide permettra de testertrue
et, bien sûr,NULL
permettra de testerfalse
.(remarque: vous devez vous assurer que
line
est un tableau de caractères déclaré portée à utilisersizeof line
que la longueur. Siline
est simplement un pointeur vers un tableau, alors vous vous contentez de liresizeof (char *)
caractères)line[]
autres que le style/debug. Voyez-vous d'autres de la valeur?while (fgets(...))
serait un échec? Je suis curieux, je n'ai pas couru à travers un.j'ai eu le même problème et je l'ai résolu de cette façon