Je lis depuis un fichier de format
1 32 43 23
32 43
123 43 54 243
123 2222
2
Voici mon extrait de code.
string[100];
while(!feof(fp))
fgets(string,100,fp)
Maintenant, quand je mets chaque chaîne, dans la dernière chaîne, je reçois la répétition et quelques ambiguïtés supplémentaires (comme quelque chose d'autre est également imprimé, disons 123 ou plus).
Comment résoudre ce problème?
Vous devez vérifier la valeur de retour de fgets . Si une lecture a réussi, fgets
renvoie le pointeur vers le tampon que vous lui avez transmis (c'est-à-dire string
dans votre exemple). Si la fin de fichier est rencontrée et qu'aucun caractère n'a été lu, fgets
renvoie NULL
.
Essaye ça:
char string[100];
while(fgets(string, 100, fp)) {
printf("%s\n", string);
}
Le eof
n'est atteint que après vous avez tenté de lire à partir d'un fichier qui se trouve à la fin. Vous devez utiliser la valeur de retour de fgets
à la place (qui renvoie NULL
sur eof ou erreur et le pointeur lui est donné autrement):
char string[100];
while(fgets(string, 100, fp))
// do stuff with string
La vérification de la valeur de retour comme celle-ci vous empêchera de toucher l'eof à l'intérieur du corps de la boucle, comme l'autre, au lieu de la condition.