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 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "structure.h"
void Lecturefichier ( FILE *f , Module t[]);
void Ecriturefichier ( Module t[]);
int main ()
{
Module exemple[LenM]; FILE *f;
f = fopen ("donnees.csv ", "r");
Lecturefichier (f,exemple);
fclose (f);
Ecriturefichier(exemple);
return 1;
}
void Lecturefichier ( FILE *f , Module t[])
{
char *pointeur;
char *buffer;
char ch[80];
char chaine[1000];
char *separateur = {";"};
int i = 1;
int valeur ;
int j = 1;
t[1].Mod ="AP11";
while ((fgets (chaine,1000,f)) != NULL )
{
fgets (ch,80,f);
buffer = strdup (ch);
pointeur = strtok(buffer,separateur);
if ( (strcmp (pointeur,t[i].Mod ))== 0 )
{
t[i].Mod = pointeur ;
pointeur = strtok (NULL , separateur);
t[i].Sem = pointeur ;
pointeur = strtok (NULL , separateur);
t[i].Prom = pointeur ;
pointeur = strtok (NULL , separateur);
t[i].Cord = pointeur ;
pointeur = strtok (NULL , separateur);
t[i].act[j].Nom = pointeur ;
pointeur = strtok (NULL , separateur);
sscanf(pointeur,"%d",&valeur);
t[i].act[j].Ng = valeur ;
pointeur = strtok (NULL , separateur);
sscanf (pointeur ,"%d", &valeur);
t[i].act[j].Neg = valeur;
pointeur = strtok (NULL , separateur);
sscanf (pointeur,"%d", &valeur);
t[i].act[j].Nhg = valeur;
j++;
}
if ((strcmp (pointeur, t[i].Mod)) != 0 )
{
i++;
t[i].Mod = pointeur ;
pointeur = strtok (NULL , separateur);
t[i].Sem = pointeur ;
pointeur = strtok (NULL , separateur);
t[i].Prom = pointeur ;
pointeur = strtok (NULL , separateur);
t[i].Cord = pointeur ;
pointeur = strtok (NULL , separateur);
t[i].act[j].Nom = pointeur ;
pointeur = strtok (NULL , separateur);
sscanf(pointeur,"%d",&valeur);
t[i].act[j].Ng = valeur ;
pointeur = strtok (NULL , separateur);
sscanf (pointeur ,"%d", &valeur);
t[i].act[j].Neg = valeur;
pointeur = strtok (NULL , separateur);
sscanf (pointeur,"%d", &valeur);
t[i].act[j].Nhg = valeur;
}
}
}
void Ecriturefichier ( Module t[] )
{
char nomfich[21];
int i,j;
FILE *sortie;
printf ( "nom du fichier à créer : ");
scanf ( "%20s" , nomfich);
sortie = fopen (nomfich , "w" );
for ( i=1;i<LenM;i++)
{
for ( j=1;j<LenA;j++)
{
fputs (t[i].Mod , sortie ); fputc (';',sortie);
fputs (t[i].Sem , sortie ); fputc (';',sortie);
fputs (t[i].Prom, sortie ); fputc (';',sortie);
fputs (t[i].Cord, sortie ); fputc (';',sortie);
fputs (t[i].act[j].Nom, sortie ); fputc (';',sortie);
putw (t[i].act[j].Ng , sortie ); fputc (';',sortie);
putw (t[i].act[j].Neg, sortie ); fputc (';',sortie);
putw (t[i].act[j].Nhg, sortie ); fputc (';',sortie);
}
}
fclose (sortie);
}
pour structure.h voilà le code :
# define LenA 10
# define LenM 50
FILE *f;
typedef struct { char *Nom;
int Ng, Neg, Nhg; } Activite ;
typedef struct { char *Mod, *Sem, *Prom, *Cord;
Activite act[LenA]; } Module ;
void Lecturefichier ( FILE *f , Module t[]);
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 ?