Problème lecture de fichier en C
Fermé
Taoufik
-
28 févr. 2012 à 15:50
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 mars 2012 à 21:04
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 mars 2012 à 21:04
A voir également:
- Problème lecture de fichier en C
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Fichier iso - Guide
3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 28/02/2012 à 19:25
Modifié par fiddy le 28/02/2012 à 19:25
Bonjour
L'avantage du calloc permet d'initialiser les tableaux à 0. Pour ma part, je trouve qu'ici ce n'est pas une bonne idée puisque tu perdras en performance.
// ici la purge du '\n' terminant chaque ligne d'un fichier texte est inutile vu que le sscanf() va l'ignorer
Effectivement, sauf que le flux fichier pointera sur le '\n' et que lors de la prochaine itération, ton fgets lira uniquement '\n' créant tout le décalage.
Je te conseille donc de faire un fgetc(file) pour décaler le pointeur du flux en début de la ligne suivante.
Sinon quelques remarques sur le programme :
printf("i=%d %d - name=%s, category=%s, price=%.2lf\n", i,nbItems, name[i], category[i], price[i]);
Ce n'est pas %lf qu'il faut mettre ici mais %f.
Ton programme gagnerait en lisibilité si tu faisais des fonctions puisqu'on voit plusieurs blocs logiques similaires (fgets / strchr / strlen / strcpy).
Et ce n'est pas -1 qu'on retourne lorsque le programme échoue mais plutôt EXIT_FAILURE qui vaut 1 la plupart du temps.
Cdlt,
Google is your friend
L'avantage du calloc permet d'initialiser les tableaux à 0. Pour ma part, je trouve qu'ici ce n'est pas une bonne idée puisque tu perdras en performance.
// ici la purge du '\n' terminant chaque ligne d'un fichier texte est inutile vu que le sscanf() va l'ignorer
Effectivement, sauf que le flux fichier pointera sur le '\n' et que lors de la prochaine itération, ton fgets lira uniquement '\n' créant tout le décalage.
Je te conseille donc de faire un fgetc(file) pour décaler le pointeur du flux en début de la ligne suivante.
Sinon quelques remarques sur le programme :
printf("i=%d %d - name=%s, category=%s, price=%.2lf\n", i,nbItems, name[i], category[i], price[i]);
Ce n'est pas %lf qu'il faut mettre ici mais %f.
Ton programme gagnerait en lisibilité si tu faisais des fonctions puisqu'on voit plusieurs blocs logiques similaires (fgets / strchr / strlen / strcpy).
Et ce n'est pas -1 qu'on retourne lorsque le programme échoue mais plutôt EXIT_FAILURE qui vaut 1 la plupart du temps.
Cdlt,
Google is your friend
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
663
28 févr. 2012 à 16:28
28 févr. 2012 à 16:28
il faudrait plutot que tu utilises calloc, pour les tableaux, non ?
28 févr. 2012 à 21:27
j'ai pas bien compris le conseil pour le fgetc(file), tu pourrais me donner un exemple pour que ce soit clair pour moi stp (jsuis débutant désolé)
28 févr. 2012 à 22:32
voir l'aide sur getc dans google, par exemple ici : http://www.cplusplus.com/reference/cstdio/fgetc/
et redemande si après ça tu n'as toujours pas compris :)
29 févr. 2012 à 06:08
29 févr. 2012 à 06:14
29 févr. 2012 à 08:28
Dans ce cas, es-tu sûr que chacune de tes lignes fait bien moins de 79 caractères ?
Comment est construit ton fichier ? Des lignes vides ? Merci de donner un exemple.