IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

problème avec fgets


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut problème avec fgets
    Bonjour, j'ai encore un pb avec mon fgets.
    J'ai N fichiers qui s'appellent Particle1.txt, Particle2.txt,..., ParticleN.txt. Tous ces fichiers ont 28 colonnes et 72001 lignes. La 1e colonne de chacun de ces fichiers est identique. Ce que je désire faire est tout simple : récupérer les colonnes 4 à 28, et calculer les moyennes (donc j'additionne toutes les 4e colonnes entre elles, toutes les 5e colonnes entre elles etc puis je divise par N). D'où l'utilisation de mon fgets.
    J'ai un autre fichier qui s'appelle MeanPTm.txt.
    Ce que je veux en sortie :
    1e colonne : la 1e colonne d'un fichier Particle*.txt (qui est la même pour tous les fichiers)
    2e et 3e colonne : les 1e et 2e colonnes du fichier MeanPTm.txt
    colonnes 4 à 28 : les moyennes que j'ai calculées.

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<assert.h>
    #include<string.h>
     
    void Pause(void)
    {
      printf("Pause : Press return to continue\n");
      getc(stdin);
    }
     
    int main()
    {
      int N=2; // mon nombre de particules
      int i,j,k; // des compteurs
      FILE * pfile1=fopen("MeanPTm.txt","r");
      FILE * pfile2=fopen("Mean.txt","w+"); // mon fichier de sorties
      char * NameFileOutput[N];
      FILE ** fileOutput=malloc(N*sizeof(*fileOutput));
      assert(fileOutput!=NULL);
     
    // ici je cree mes strings "Particle1.txt", "Particle2.txt", etc...
      for(i=0;i<N;++i)
      {
        char s[]="Particle";
        char buf[5];
        sprintf(buf,"%u",i+1);
        strcat(s,buf);
        strcat(s,".txt");
        NameFileOutput[i]=strdup(s);
        printf("name = %s\n",NameFileOutput[i]);
        fileOutput[i]=fopen(NameFileOutput[i], "r");
        assert(fileOutput[i]!=NULL);
      }
     
      double a,b,c;
      char line1[35000],line3[35000];
      double tab[25],theta; // theta : variable qui va recuperer la valeur de ma 1e colonne de mon fichier Particle*.txt
      for(i=0;i<25;++i) tab[i]=0.;
      char * line32=malloc(35000*sizeof(*line32));
      assert(line32!=NULL);
     
      for(i=1;i<=72001;i++)
      {
        printf("i = %d\n",i);
        fgets(line1,sizeof line1, pfile1);
        sscanf(line1,"%lf%lf%lf",&a,&b,&c);
        printf("%f\t%f\t%f\n",a,b,c);
     
          for(j=0;j<N;++j)
          {
            fgets(line3,sizeof line3, fileOutput[j]);
    	assert(fgets!=NULL);
    	printf("line3 = %s\n",line3); // l'erreur est ici : line3 est nulle !!
     
    	strcpy(line32,line3);
    	theta=strtod(line32,&line32);
    	strtod(line32,&line32);
    	strtod(line32,&line32);
    	for(k=0;k<25;++k) tab[k]+=strtod(line32,&line32);	
          }
     
          for(k=0;k<25;++k) tab[k]/=N;
          fprintf(pfile2,"%14.6le\t%14.6le\t%14.6le",theta,a,b);
          for(k=0;k<25;++k) fprintf(pfile2,"\t%14.6le",tab[k]);
          fprintf(pfile2,"\n");      
      }
     
      fclose(pfile1); fclose(pfile2);
      for(i=0;i<N;++i) fclose(fileOutput[i]);  
     
      free(fileOutput); fileOutput=NULL;
      free(line32); line32=NULL;
     
      return EXIT_SUCCESS;
    }
    Certes, le code n'est peut-être pas le mieux écrit qui soit, mais j'aimerais savoir pourquoi est-ce que line3 est nulle ?

    Merci.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    oups : j'ai trouvé mon erreur : je ne chopais pas le fichier dans le bon répertoire
    Désolé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec fgets
    Par kadd18 dans le forum C
    Réponses: 3
    Dernier message: 28/07/2009, 19h58
  2. Probléme avec fgets
    Par Lucas42 dans le forum C
    Réponses: 2
    Dernier message: 18/11/2007, 03h08
  3. Problème avec fgets() et strlen()
    Par condor_01 dans le forum C
    Réponses: 6
    Dernier message: 28/10/2007, 12h41
  4. Problème avec fgets
    Par fabpeden dans le forum C
    Réponses: 13
    Dernier message: 15/05/2007, 10h25
  5. Problème avec fgets et tube...
    Par tchingoo dans le forum POSIX
    Réponses: 5
    Dernier message: 22/08/2003, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo