Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2639 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Probléme avec les fichiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probléme avec les fichiers

n°1872768
man_u
Posté le 14-04-2009 à 13:20:46  profilanswer
 

Voici mon code:

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. FILE* fonction1(FILE *fichier_cos,int N, int M);
  4. int fonction2(FILE* fichier ,int N, int M);
  5. int main(int argc, char *argv[])
  6. {
  7.    FILE *fichier_cos,*f,*fichier_f;
  8.    int N=3,M=3;
  9.    fichier_cos=fopen("fichier_cos.txt","r+" );
  10.    fichier_f=fopen("fichier_f.txt","r+" );
  11.    if(fichier_cos != NULL && fichier_f != NULL )
  12.    {
  13.      
  14.             fichier_cos=fonction1(fichier_cos,N, M);
  15.             f=fonction2(fichier_cos,N,M);
  16.             fprintf(fichier_f,"%d |",f);
  17.    }
  18.    else
  19.    {
  20.       printf("Erreur lors de l'ouveture de fichier" );
  21.    }
  22.     return 0;
  23. }
  24. FILE* fonction1(FILE *fichier_cos,int N, int M)
  25. {
  26.    int i,j;
  27.    for(i=0;i<N;i++)
  28.     {
  29.        for(j=0;j<M;j++)
  30.         {
  31.            fprintf(fichier_cos,"%d",i*j);
  32.             fputs("|",fichier_cos);//separation entre les valeurs
  33.          }
  34.    }
  35.    return fichier_cos;
  36. }
  37. int fonction2(FILE* fichier ,int N, int M)
  38. {
  39.    int i,j,nb=0;
  40.    int recup[255][255];
  41.    for(i=0;i<N ;i++)
  42.    {
  43.       for(j=0;j<M ;j++)
  44.       {
  45.             fscanf(fichier, "%d|",&recup[i][j]);
  46.             printf("%d\t",recup[i][j]);// ici il m'affiche 0
  47.       }
  48.    }
  49.    for(i=0;i<N;i++)
  50.       for(j=0;j<M;j++)
  51.          nb=nb+recup[i][j];
  52.    return nb;
  53. }


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
mood
Publicité
Posté le 14-04-2009 à 13:20:46  profilanswer
 

n°1872772
Elmoricq
Modérateur
Posté le 14-04-2009 à 13:30:56  profilanswer
 

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. :o

 


edit : correction du point 4, j'ai craqué :o


Message édité par Elmoricq le 14-04-2009 à 13:46:34
n°1872775
man_u
Posté le 14-04-2009 à 13:41:50  profilanswer
 

j'ai pas fait des close(), parceque mon programme est encore trop long!
 
Si mon fichier contient: 15 20 30

Code :
  1. int main(int argc, char *argv[])
  2. {
  3.     FILE* fichier = NULL;
  4.     long score[3] = {0}; // Tableau des 3 meilleurs scores
  5.     fichier = fopen("test.txt", "r" );
  6.     if (fichier != NULL)
  7.     {
  8.         fscanf(fichier, "%ld %ld %ld", &score[0], &score[1], &score[2]);
  9.         printf("Les meilleurs scores sont : %ld, %ld et %ld", score[0], score[1], score[2]);
  10.         fclose(fichier);
  11.     }
  12.     return 0;
  13. }


 
ça marche a merveille

n°1872777
Joel F
Real men use unique_ptr
Posté le 14-04-2009 à 13:44:27  profilanswer
 

man_u a écrit :

j'ai pas fait des close(), parceque mon programme est encore trop long!


le rapport avec la choucroute o_O

n°1872778
Elmoricq
Modérateur
Posté le 14-04-2009 à 13:51:23  profilanswer
 

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. :o
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
     third character in the mode argument), both input and output
     may be performed on the associated stream.  However,  output
     must  not be directly followed by input without an interven-
     ing call to fflush(3C) or to a file positioning  function  (
     fseek(3C), fsetpos(3C) or rewind(3C)), and input must not be
     directly followed by output without an intervening call to a
     file   positioning  function,  unless  the  input  operation
     encounters end-of-file.

 


Autre chose :

Code :
  1. fprintf(fichier_f,"%d |",f);


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.

Message cité 2 fois
Message édité par Elmoricq le 14-04-2009 à 13:54:56
n°1872781
man_u
Posté le 14-04-2009 à 14:02:47  profilanswer
 

Elmoricq a écrit :


 
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. :o
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.
[/fixed]


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 :
  1. fprintf(fichier_f,"%d |",f);//f est un entier entier j'ai fait une erreur dans la déclaration


Message cité 2 fois
Message édité par man_u le 14-04-2009 à 14:07:41
n°1872782
man_u
Posté le 14-04-2009 à 14:10:52  profilanswer
 

Elmoricq a écrit :


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.


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)

n°1872783
Elmoricq
Modérateur
Posté le 14-04-2009 à 14:11:28  profilanswer
 

man_u a écrit :


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?


C'est marqué dans l'extrait de la documentation que j'ai mis.

n°1872796
kao98
...
Posté le 14-04-2009 à 14:36:29  profilanswer
 

man_u a écrit :


Je voulais dire il n'est pas encore terminer loool


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 !


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1872799
Elmoricq
Modérateur
Posté le 14-04-2009 à 14:39:02  profilanswer
 

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).

mood
Publicité
Posté le 14-04-2009 à 14:39:02  profilanswer
 

n°1872810
kao98
...
Posté le 14-04-2009 à 14:59:35  profilanswer
 

Elmoricq a écrit :


 
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).


Ca dépend des systèmes non ?


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1872815
Elmoricq
Modérateur
Posté le 14-04-2009 à 15:04:25  profilanswer
 

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. [:joce]

n°1872818
kao98
...
Posté le 14-04-2009 à 15:07:44  profilanswer
 

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.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1872820
Un Program​meur
Posté le 14-04-2009 à 15:11:22  profilanswer
 

kao98 a écrit :


Ca dépend des systèmes non ?


 
Et des ressources.

n°1872821
Elmoricq
Modérateur
Posté le 14-04-2009 à 15:11:56  profilanswer
 

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... [:cosmoschtroumpf]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Probléme avec les fichiers

 

Sujets relatifs
[résolu] [vbs] Problème pour effacer des fichiers[Résolu] Problème pour lire et écrire des fichiers pgm en C++
probleme vb excel inter fichiers[C] probleme de fichiers
Problème pour générer la DTD de fichiers XMLProblème Fichiers
Problème de création de boucles[RESOLU] Probleme pour renommer les fichiers PHP
Problème formulaire d'upload pour les fichiers > 500 Koprobleme upload certains types de fichiers (mp3, guitarpro)
Plus de sujets relatifs à : Probléme avec les fichiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR