Bonjour je dois gérer une liste client en utilisant une liste chaînée...J'ai défini diverses fonctions pour ce faire et ensuite j'ai essayé d' insérer une nouvelle fiche client mais la "Erreur de segmentation (core dumped)".a l'aide d'un debugger j'ai trouvé l'erreur
à la ligne 14 de mon programme:
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include<stdio.h>
#include<stdlib.h>
#include "liste_client_test.h"
 
void inserer(l_fiches **tete,fiche_c nouvellef)
{
//int fin_fich;
 
/*On insere en tete*/
l_fiches *nouveau;
 
nouveau=(l_fiches*)malloc(sizeof(l_fiches));//On reserve lespace pour la nouvelle fiche client
nouveau->client=nouvellef;
nouveau->p_suiv=*tete;
*tete=nouveau;
}
 
 
l_fiches* lire_fichier()
{
FILE *fichier;
fiche_c f;
l_fiches *liste=NULL; 			//Initialisation de la liste chainee
 
fichier=fopen("liste_client.txt","r");	//On ouvre le fichier en mode lecture
 
while((fscanf(fichier,"%d\t%d\t%f",&(f.numero),&(f.cc),&(f.solde)))!=EOF)
{
inserer(&liste,f);
}
 
fclose(fichier);
return liste;
}
 
 
void afficher(l_fiches *liste)
{
while(liste!=NULL)
{
printf("%d\t%d\t%f",liste->client.numero,liste->client.cc,liste->client.solde);
liste=liste->p_suiv;
}
}
 
l_fiches* selectionner(l_fiches* liste,int numero)
{
l_fiches* select=NULL;
while(liste!=NULL)
{
	if(numero==(liste->client.numero))
	{
	select=liste;
	return select;
	}
liste=liste->p_suiv;
}
return select;
}
 
void modifier(l_fiches* liste)
{
int numero;
l_fiches* cherche;
printf("Entrer le numero de client a rechercher:\n");
scanf("%d",&numero);
cherche=selectionner(liste,numero);
 
if(cherche!=NULL)
{
printf("code: %d et solde: %f",cherche->client.cc,cherche->client.solde);
scanf("%d",&(cherche->client.cc));
}
else
{
printf("Numero de carte introuvable\n");
}
}
 
 
void sauvegarder(l_fiches* liste)
{
FILE *fichier;
l_fiches *courant;
 
if((fichier=fopen("liste_client.txt","w"))==NULL)
{
printf("Fichier introuvable\n");
exit(1);
}
courant=liste;
while(courant!=NULL)
{
fprintf(fichier,"%d\t%d\t%f\n",courant->client.numero,courant->client.cc,courant->client.solde);
courant=courant->p_suiv;
}
fclose (fichier);
}
 
void liberer_mem(l_fiches* liste)
{
while(liste!=NULL)
{
l_fiches* courant;
courant=liste;
	while(courant!=NULL)
	{
	liste=liste->p_suiv;
	free(courant);
	courant=liste;	
	}
}
}
 
 
int main()
{
/*Insertion d'une nouvelle fiche*/
fiche_c nouveau;
l_fiches *tete=NULL;
l_fiches *liste;
printf("Veuillez entrer le numero client: \n");
scanf("%d",&(nouveau.numero));
printf("Veuillez entrer le code: \n");
scanf("%d",&(nouveau.cc));
 
liste=lire_fichier(); //On va dabord lire le ficher texte et creer la liste chainee
inserer(&tete,nouveau);//On insere une nouvelle fiche
afficher(liste);//On affiche la nouvelle liste
sauvegarder(liste);//On sauvegarde
liberer_mem(liste);//On libere la memoire
 
 
printf("Fin\n");
return 0;
}
Je vous met aussi mon .h

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
#ifndef liste_client_test_h
#define liste_client_test_h
 
typedef struct
{
int numero;
int cc;
float solde;
}fiche_c;
 
typedef struct l_fiches
{
fiche_c client;
struct l_fiches *p_suiv;
}l_fiches;
 
 
void inserer(l_fiches **tete,fiche_c nouvellef);
l_fiches* lire_fichier();
void afficher(l_fiches *liste);
void modifier(l_fiches* liste);
l_fiches* selectionner(l_fiches* liste,int numero);
void sauvegarder(l_fiches* liste);
void liberer_mem(l_fiches* liste);
 
#endif
J'espère que vous pourrez m'aider à m'en dépatouiller!Dans l'attente de vos remarque...
++