Probléme avec les fichiers - C - Programmation
Marsh Posté le 14-04-2009 à 13:30:56
1. à quoi sert de retourner des FILE* pour tes fonctions ?
2. il manque des fclose()
3. essaie de nommer tes fonctions avec des noms parlants, là on est obligé de décortiquer ton code pour comprendre ce qu'il est censé faire
4. fscanf(fichier, "%d|",&recup[i][j]); >> tu devrais tester le code retour de fscanf pour vérifier que la lecture a bien été faite.
Il doit rester encore plein de choses, j'ai la flemme de poursuivre.
edit : correction du point 4, j'ai craqué
Marsh Posté le 14-04-2009 à 13:41:50
j'ai pas fait des close(), parceque mon programme est encore trop long!
Si mon fichier contient: 15 20 30
Code :
|
ça marche a merveille
Marsh Posté le 14-04-2009 à 13:44:27
man_u a écrit : j'ai pas fait des close(), parceque mon programme est encore trop long! |
le rapport avec la choucroute o_O
Marsh Posté le 14-04-2009 à 13:51:23
man_u a écrit : j'ai pas fait des close(), parceque mon programme est encore trop long! |
Hmm. Ton programme est loin d'être gros. Participe à un projet dont le code pèse plusieurs centaines de milliers de lignes, et on commencera à parler de gros programme.
Bref. Tu utilises une ressources (mémoire, flux, fichiers, ce que tu veux), tu dois ensuite libérer cette ressource lorsque tu n'en as plus besoin. C'est un principe de base, qu'il est vital d'appliquer.
Pour ton souci, j'ai corrigé mon point 4 où j'ai raconté n'importe quoi, une fois n'est pas coutûme.
Ton problème vient de ce que tu lis un fichier dans lequel tu viens d'écrire. Lis la documentation de fopen() :
When a file is opened with update mode (+ as the second or |
Autre chose :
Code :
|
Je ne sais pas ce que tu attends de cette ligne, mais elle a tout lieu de faire planter le programme. Tu es en effet en train de demander à printf d'imprimer un FILE* en le faisant passer pour un int.
Pour imprimer le contenu d'un fichier dans un autre, tu n'as pas d'autre choix que de lire le premier fichier et de le recopier dans le second.
Marsh Posté le 14-04-2009 à 14:02:47
Elmoricq a écrit : |
Je voulais dire il n'est pas encore terminer loool
Merci Elmoricq! mais puisque je ne peux pas lire à partir d'un fichier dans lequel je vien d'écrire, alors que j'ai besoin de ces information,que doi-je faire?
Code :
|
Marsh Posté le 14-04-2009 à 14:10:52
Elmoricq a écrit : |
Si je doit recopier le premier fichier dans un autre apres je vais réutiliser ce dernier sa revien en meme non?? (ecriture puis lecture)
Marsh Posté le 14-04-2009 à 14:11:28
man_u a écrit : |
C'est marqué dans l'extrait de la documentation que j'ai mis.
Marsh Posté le 14-04-2009 à 14:36:29
man_u a écrit : |
C'est encore pire comme justification ! Ca veut dire que tu attends que tu programme soit terminé pour fermer et libérer tes ressources !? Tu as donc plus d'une chance sur deux d'oublier, en fin de compte !
Du moment que tu ouvres un fichier, tu testes la valeur de retour de ta fonction d'ouverture du fichier ET tu ajoutes la ligne qui fermera ton fichier. Ensuite, tu peux taper ton code qui se trouve entre l'ouverture et la fermeture. Il faut que ça devienne un réflexe de fermer une ressource. Surtout en C : personne d'autre ne le fera pour toi !
Marsh Posté le 14-04-2009 à 14:39:02
kao98 a écrit : Surtout en C : personne d'autre ne le fera pour toi ! |
Le système à l'arrêt du programme.
Mais ce serait une raison foireuse de ne pas libérer ses ressources (pour tout un tas de bonnes raisons).
Marsh Posté le 14-04-2009 à 14:59:35
Elmoricq a écrit : |
Ca dépend des systèmes non ?
Marsh Posté le 14-04-2009 à 15:04:25
Ben les systèmes que je connais aujourd'hui le font, mais ma connaissance n'est pas très grande en la matière. Je me souviens des vieux MacOS (avant X) qui ne le faisaient pas, par exemple.
Marsh Posté le 14-04-2009 à 15:07:44
De toute façon, il FAUT libérer soit même ses ressources.
Le jour où tu fais de l'embarqué, ou un service qui tourne non-stop, t'es bien content d'avoir chopé ces réflexes.
Marsh Posté le 14-04-2009 à 15:11:22
ReplyMarsh Posté le 14-04-2009 à 15:11:56
Ah nan mais même sans parler d'embarqué : tu fais un programme appelé à rester un minimum de temps en mémoire, tu peux être sûr que si tu ne chopes pas ce réflexe, tu cours à la catastrophe. Déjà qu'en ayant ce réflexe on en oublie...
Marsh Posté le 14-04-2009 à 13:20:46
Voici mon code:
j'ai deux fichiers, le premier est: fichier_cos.txt qui contient le produit des indices et l'autre fichier_f.txt qui doit normalament m'afficher l'addition des nombres qui ce trouve dans le premiers fichier ( fichier_cos.txt ). le Probléme c'est qu'il m'affiche tjr un 0 et je ne sais pas pourquoi !!!
Message édité par man_u le 14-04-2009 à 13:28:41