quelle est la bonne façon de lire un fichier texte jusqu'à EOF en utilisant fgets en C? Maintenant j'ai ceci (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 demande s’il devrait y avoir quelque chose d’autre que la condition pendant laquelle? Est-ce que l'analyse du fichier texte vers "ligne" doit être effectuée dans la condition while?
Selon la référence
En cas de succès, la fonction retourne str . Si la fin du fichier est rencontrée lors de la tentative de lecture d'un caractère, l'indicateur eof est défini sur (Feof). Si cela se produit avant que des caractères puissent être lus, le pointeur Renvoyé est un pointeur nul (et le contenu de str reste inchangé à [.____.)). Si une erreur de lecture se produit, l'indicateur d'erreur (ferror) est réglé sur Et un pointeur nul est également renvoyé (mais le contenu pointé par Str a peut-être changé).
Donc, vérifier si la valeur renvoyée est bien NULL
suffit. De plus, l'analyse va dans le while-body.
Ce que vous avez fait est acceptable à 100%, mais vous pouvez également simplement compter sur le retour de fgets
comme test lui-même, par exemple.
char line[100 + 1] = ""; /* initialize all to 0 ('\0') */
while (fgets(line, sizeof(line), tsin)) { /* tsin is FILE* input */
/* ... doing stuff with line */
}
Pourquoi? fgets
renverra un pointeur sur line
en cas de succès, ou NULL
en cas d'échec (pour quelque raison que ce soit). Un pointeur valide testera true
et, bien sûr, NULL
testera false
.
( remarque: vous devez vous assurer que line
est un tableau caractères déclaré dans la portée pour utiliser sizeof line
comme longueur. Si line
est simplement un pointeur sur un tableau, vous ne lisez que sizeof (char *)
personnages)
J'ai eu le même problème et je l'ai résolu de cette façon
while (fgets(line, sizeof(line), tsin) != 0) { //get an int value
... //doing stuff with line
}