Tom's Guide > Forum > Programmation > ce programme pourriez vous le vérifier ?

ce programme pourriez vous le vérifier ?

Forum Programmation : ce programme pourriez vous le vérifier ?

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

salut ,

j'ai écrit un prog en C , la compilation n'affiche aucune erreur , par contre l'exécution donne Erreur de segmentation .. si qq pourra le vérifier pour savoir où est la faute ... je vous remercie d'avance :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "structure.h"
  5. void Lecturefichier ( FILE *f , Module t[]);
  6. void Ecriturefichier ( Module t[]);
  7. int main ()
  8. {
  9.   Module exemple[LenM]; FILE *f;
  10.   f = fopen ("donnees.csv ", "r" );
  11.   Lecturefichier (f,exemple);
  12.   fclose (f);
  13.   Ecriturefichier(exemple);
  14.   return 1;
  15. }
  16. void Lecturefichier ( FILE *f , Module t[])
  17. {
  18.   char *pointeur;
  19.   char *buffer;
  20.   char ch[80];
  21.   char chaine[1000];
  22.   char *separateur = {";"};
  23.   int i = 1;
  24.   int valeur ;
  25.   int j = 1;
  26.   t[1].Mod ="AP11";
  27.   while ((fgets (chaine,1000,f)) != NULL )
  28.     {
  29.       fgets (ch,80,f);
  30.       buffer = strdup (ch);
  31.       pointeur = strtok(buffer,separateur);
  32.       if ( (strcmp (pointeur,t[i].Mod ))== 0 )
  33.     {
  34.       t[i].Mod = pointeur ;
  35.       pointeur = strtok (NULL , separateur);
  36.       t[i].Sem = pointeur ;
  37.       pointeur = strtok (NULL , separateur);
  38.       t[i].Prom = pointeur ;
  39.       pointeur = strtok (NULL , separateur);
  40.       t[i].Cord = pointeur ;
  41.       pointeur = strtok (NULL , separateur);
  42.       t[i].act[j].Nom = pointeur ;
  43.       pointeur = strtok (NULL , separateur);
  44.       sscanf(pointeur,"%d",&valeur);
  45.       t[i].act[j].Ng = valeur ;
  46.       pointeur = strtok (NULL , separateur);
  47.       sscanf (pointeur ,"%d", &valeur);
  48.       t[i].act[j].Neg = valeur;
  49.       pointeur = strtok (NULL , separateur);
  50.       sscanf (pointeur,"%d", &valeur);
  51.       t[i].act[j].Nhg = valeur;
  52.       j++;
  53.     }
  54.       if ((strcmp (pointeur, t[i].Mod)) != 0 )
  55.     {
  56.       i++;
  57.           t[i].Mod = pointeur ;
  58.       pointeur = strtok (NULL , separateur);
  59.       t[i].Sem = pointeur ;
  60.       pointeur = strtok (NULL , separateur);
  61.       t[i].Prom = pointeur ;
  62.       pointeur = strtok (NULL , separateur);
  63.       t[i].Cord = pointeur ;
  64.       pointeur = strtok (NULL , separateur);
  65.       t[i].act[j].Nom = pointeur ;
  66.       pointeur = strtok (NULL , separateur);
  67.       sscanf(pointeur,"%d",&valeur);
  68.       t[i].act[j].Ng = valeur ;
  69.       pointeur = strtok (NULL , separateur);
  70.       sscanf (pointeur ,"%d", &valeur);
  71.       t[i].act[j].Neg = valeur;
  72.       pointeur = strtok (NULL , separateur);
  73.       sscanf (pointeur,"%d", &valeur);
  74.       t[i].act[j].Nhg = valeur;
  75.     }
  76.     }
  77. }
  78. void Ecriturefichier ( Module t[] )
  79. {
  80.   char nomfich[21];
  81.   int i,j;
  82.   FILE *sortie;
  83.   printf ( "nom du fichier à créer : " );
  84.   scanf ( "%20s" , nomfich);
  85.   sortie = fopen (nomfich , "w" );
  86.   for ( i=1;i<LenM;i++)
  87.     {
  88.       for ( j=1;j<LenA;j++)
  89.     {
  90.       fputs (t[i].Mod , sortie ); fputc (';',sortie);
  91.       fputs (t[i].Sem , sortie ); fputc (';',sortie);
  92.       fputs (t[i].Prom, sortie ); fputc (';',sortie);
  93.       fputs (t[i].Cord, sortie ); fputc (';',sortie);
  94.       fputs (t[i].act[j].Nom, sortie ); fputc (';',sortie);
  95.       putw (t[i].act[j].Ng , sortie ); fputc (';',sortie);
  96.       putw (t[i].act[j].Neg, sortie ); fputc (';',sortie);
  97.       putw (t[i].act[j].Nhg, sortie ); fputc (';',sortie);
  98.     }
  99.     }
  100.   fclose (sortie);
  101. }


pour structure.h voilà le code :

Code :
  1. # define LenA 10
  2. # define LenM 50
  3. FILE *f;
  4. typedef struct { char *Nom;
  5.                 int Ng, Neg, Nhg; } Activite ;
  6. typedef struct { char *Mod, *Sem, *Prom, *Cord;
  7.   Activite act[LenA]; } Module ;
  8. void Lecturefichier ( FILE *f , Module t[]);
  9. void Ecrirefichier ( Module t[]);


donnees.csv est un fichier csv de cette forme :
"qsds";"sfsdf";"hjj";"hsdfh";1;5;5;
"gdfhjg";"sd";"dkfns";"dksk";2;5;5
...ainsi de suite


pour l'erreur : mon fichier que j'utlilise est forme de LenM = 2 et LenA = 4 . est ce que cela peut etre la cause ?


Message édité par dadadodi le 08-09-2007 à 19:08:53
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

toujours vérifier les retours de fonctions!
en l'occurence, tu a un espace en trop dans le nom du fichier, tu aurais vérifié le retour de "fopen", ca t'aurait économisé une prise de tête :p


Message édité par coca25 le 08-09-2007 à 22:49:59
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

J'ai un problème avec strtok_r,
par exemple, si j'ai ce buffer :
monday tuesday

ptr=strtok_r(buffer," ",str_ptr );
affiche monday
et puis pour recupere la seconde chaine de caractère
ptr=strtok_r(*str_ptr," ",str_ptr );
affche NULL

Répondre à mon815

Code :
  1. char *ptr;
  2. char buffer[]="monday tuesday";
  3. ptr=strtok (buffer, " " );
  4. while (ptr != NULL)
  5. {
  6.   printf ("%s\n", ptr);
  7.   ptr = strtok (NULL, " " );
  8. }


Message édité par coca25 le 21-09-2007 à 13:26:59
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25
Tom's Guide > Forum > Programmation > ce programme pourriez vous le vérifier ?
Aller à :

Il y a 605 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens