Lecture dans differents fichiers en C
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Lecture dans differents fichiers en C



  1. #1
    invite70eda27f

    Question Lecture dans differents fichiers en C


    ------

    Bonjour a tous !

    Je souhaitais ecrire un programme en C qui lit dans differents fichiers suivant la reponse a un if. En clair, si la variable tbl[i] vaut 3500 mon programme devrait m'ouvrir un fichier nomme T3500.ASC, lire dedans et ecrire les donnees dans un nouveau fichier nomme nouvflux.dat De meme si tbl[i] vaut 5000, il doit ouvrir le fichier T5000.ASC, lire dedans et ecrire dans le meme nouveau fichier que precedemment.
    Probleme, a l'execution du programme, il y a une erreur de segmentation : Segmentation fault (core dumped). Savez vous d'ou elle peut venir ?
    Voici mon programme:
    Code:
    #include<fstream>
    #include<stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include<iostream>
    using namespace std;
    
    int main()
    {
     char chaine[15];
      FILE *nouvflux;nouvflux=fopen("nouvflux.dat","w");
      int i,k,compteur=1000;
      double tbl[1000],nouv[8000];
      tbl[1]=3500; //je donne une valeur a tbl[1] pour tester le programme.
      for(i=0;i<=compteur;i++)
        { 
     if(tbl[i]==3500)
        {
      sprintf(chaine,"T%lf.ASC",tbl[i]);
        FILE *file=fopen(chaine,"r");
      for(k=0;k<=7999;k++)
        {
      fscanf(file,"%lf",nouv[k]);
      fprintf(nouvflux,"%lf",nouv[k]);
        }
        }
        }
    
     return 0;
    }

    Merci d'avance pour vos reponses !

    -----

  2. #2
    invite765732342432
    Invité

    Re : Lecture dans differents fichiers en C

    Citation Envoyé par dimofzion Voir le message
    Probleme, a l'execution du programme, il y a une erreur de segmentation : Segmentation fault (core dumped). Savez vous d'ou elle peut venir ?
    C'est probablement du au fait que tu ne testes pas si ton fichier est bien ouvert lorsque tu fais ton fscanf...

  3. #3
    invite70eda27f

    Re : Lecture dans differents fichiers en C

    Comment fait-on cela ?
    Merci

  4. #4
    invite765732342432
    Invité

    Re : Lecture dans differents fichiers en C

    Citation Envoyé par dimofzion Voir le message
    Comment fait-on cela ?
    Merci
    Euh... il va falloir au moins que tu suives des tutoriels sur internet avant de te lancer d'avantage en C: en te lançant au hasard, il y a peu de chances que tu arrives à faire un programme qui marche.

    Celà dit, pour répondre à ta question, il suffit de vérifier si file est égal à NULL ou pas.

  5. A voir en vidéo sur Futura
  6. #5
    invite70eda27f

    Question Re : Lecture dans differents fichiers en C

    OK merci pour ta reponse. L'erreur de segmentation semble resolue mais il subsiste un autre probleme lorsque je veux tester differentes valeurs de tbl[i].
    Voila mon code :

    Code:
      int main() 
    {
    FILE *nouvflux;nouvflux=fopen("nouvflux.dat","w");
      double tbl[1000];
      FILE *file = NULL;
      int i,k;
      char chaine[50] = {0}; 
      double nouv[8000]={0};
        
      tbl[0]=4000;
      tbl[1]=3500;
      tbl[2]=7500;
        
      for(i=0;i<=5;i++)
        {
          
        
          if(tbl[i]==3500)
    	{
    	  cout<<"OK"<<tbl[i]<<endl;;
    	  sprintf(chaine,"T%f.ASC",tbl[i]);
    	  file = fopen(chaine, "r");
    	  if(file == NULL) return 1; 
    	  else
    	    {
    	      for(k=0;k<=7999;k++)
    		{
    		  fscanf(file,"%f",nouv[i]);
    		  fprintf(nouvflux,"%f",nouv[i]);
    		  continue;
    		  }}}
    
    if(tbl[i]==4000)
    	{
    	  cout<<"OK"<<tempmunari[i]<<endl;
    	  sprintf(chaine,"T%f.ASC",tbl[i]);
    	  file = fopen(chaine, "r");
    	   if(file == NULL) return 1; 
    	   else
    	    {
    	       for(k=0;k<=7999;k++)
    		{
    		  fscanf(file,"%f",nouv[i]);
    		  fprintf(nouvflux,"%f",nouv[i]);
    		  continue;
    		}}}
     
    
    if(tempmunari[i]==7000)
    	{
    	  cout<<"OK"<<tbl[i]<<endl;
    	  sprintf(chaine,"T%f.ASC",tbl[i]);
    	  file = fopen(chaine, "r");
    	  if(file == NULL) return 1; 
    	  else
    	    {
    	      for(k=0;k<=7999;k++)
    		{
    		  fscanf(file,"%f",nouv[i]);
    		  fprintf(nouvflux,"%f",nouv[i]);
    		  continue;
    		}}}
     
    }
    	
      return 0;
    }
    Le probleme maintenant c'est qu'il s'arrete de tourner des qu'une valeur de tbl[i] est egale a 3500 ou 4000 ou 7500. En effet, il m'affiche uniquement "OK4000" ce qui correspond au premier passage dans la boucle for...Pourquoi ne m'affiche-t-il pas ensuite OK3500 et OK7500 sur le terminal ? Pareil, il ne lit pas dans le fichier que je lui demande d'ouvrir et n'ecrit pas dans le fichier nouvflux.dat...il semble s'arreter avant en fait.

    Merci d'avance

    PS: J'utilise regulierement les tutoriels sur internet...le probleme c'est qu'ils ne repondent pas toujours a une question precise que l'on peut se poser quand on debute...les forums me semblent alors plus adaptes lorsque des personnes comme toi sont pretes a repondre...

  7. #6
    invite765732342432
    Invité

    Re : Lecture dans differents fichiers en C

    Citation Envoyé par dimofzion Voir le message
    Le probleme maintenant c'est qu'il s'arrete de tourner des qu'une valeur de tbl[i] est egale a 3500 ou 4000 ou 7500. En effet, il m'affiche uniquement "OK4000" ce qui correspond au premier passage dans la boucle for...Pourquoi ne m'affiche-t-il pas ensuite OK3500 et OK7500 sur le terminal ? Pareil, il ne lit pas dans le fichier que je lui demande d'ouvrir et n'ecrit pas dans le fichier nouvflux.dat...il semble s'arreter avant en fait.
    Il doit échouer à ce niveau:
    Code:
    	  sprintf(chaine,"T%f.ASC",tbl[i]);
    	  file = fopen(chaine, "r");
    	   if(file == NULL) return 1;
    Probable que le fichier n'existe pas. Pour être sur, voici plusieurs conseils:
    - rajouter "./" au début du nom du fichier pour indiquer qu'il se trouve dans le répertoire courant (si c'est le cas)
    - afficher à l'écran la valeur de chaine(pour vérifier que c'est bien le nom que tu espérais): je pense que c'est là ton problème.
    - améliore ta gestion des erreurs: plutôt que de simplement faire "return 1" en cas d'erreur, affiche avant un message du style "erreur pendant ouverture du fichier XXX" en remplaçant XXX par la valeur de chaine, ça t'aidera beaucoup.

  8. #7
    invite70eda27f

    Re : Lecture dans differents fichiers en C

    Merci pour ta reponse.
    Effectivement, en lui demandant de m'afficher la chaine sur le terminal je me suis rendu compte qu'il m'ecrivait T4000.000000.ASC au lieu de T4000.ASC donc il ne pouvait pas ouvrir le fichier. J'ai corrige le probleme en utilisant un entier au lieu d'un double et maintenant j'ai a nouveau une erreur de segmentation. Je precise que je n'ai rien modifie d'autre notamment les tests si le fichier est bien ouvert.
    D'ou peut-elle provenir ?
    Encore merci de ton aide

  9. #8
    invite765732342432
    Invité

    Re : Lecture dans differents fichiers en C

    Citation Envoyé par dimofzion Voir le message
    D'ou peut-elle provenir ?
    Peut-être les 8000 fscanf effectués sans vérifier si tu es arrivé en fin de fichier ?
    Allez, ce coup ci, pour t'entrainer, je te laisse chercher sur le net comment faire, tu devrais trouver facilement

    Sinon quelques autres commentaires:
    - le continue en fin de boucle for ne sert à rien puisqu'il n'y a rien derrière
    - en général, on n'écris pas dans un for "k <= 7999" mais k < 8000 (comme ça, ça permet de définir un constante TAILLE_DU_TABLEAU égale à 8000 et le mettre dans les deux cas (idem pour le 5).
    - tu n'as pas vérifier que nouveauflux était bien ouvert... ça peut aussi faire planter !

Discussions similaires

  1. Copie de fichiers dans differents dossiers
    Par invite70eda27f dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 18/06/2008, 20h27
  2. Lecture en C dans plusieurs fichiers
    Par invite70eda27f dans le forum Logiciel - Software - Open Source
    Réponses: 8
    Dernier message: 09/06/2008, 14h50
  3. probleme cd et dvd rw et lecture de fichiers
    Par invite4ef1eec7 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 17/05/2007, 09h23
  4. outil de transfert asynchrone de fichiers entre différents réseaux
    Par invite4a9db268 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 08/04/2005, 19h40
  5. Lecture fichiers .MVI
    Par kymoi dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 25/10/2004, 10h17
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...