web-dev-qa-db-fra.com

Lecture à partir d'un fichier à l'aide de fgets

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?

12
Kraken

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);
}
21
dasblinkenlight

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.

6
Seth Carnegie