Slt je viens d’ecrire une fonction qui charge le contenu d’un fichier dans une liste avec chainage simple . La compil est normale sans aucun warning mais lors de l’execution ça coince . Je m’explique :
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
 
typedef struct information_composant             //c pour l'arbre des procedures
{
	int code_composant;
	float qte;
	int code_section_usinage;
	int temps_integration_composant ;
}information_composant;
 
typedef struct liste_composant			//ça aussi
{
	information_composant info_composant;
	liste_composant* svt;
}liste_composant;
 
// fct qui ajoute la struct composant dans la liste chainée
void ajouter_fin_liste_composant(liste_composant** l_c,information_composant c)
{
	liste_composant* temp=*l_c;
 
	if (temp==NULL)
	{
		(*l_c)=(liste_composant*)malloc(sizeof(liste_composant*));
		(*l_c)->info_composant=c;
		(*l_c)->svt=NULL;
	}
	else
	{
		while(temp->svt!=NULL)
 
		{temp=temp->svt;}
 
		temp->svt=(liste_composant*)malloc(sizeof(liste_composant*));
		temp->svt->info_composant=c;
		temp->svt->svt=NULL;
	}
}
//fct qui chagre le contenu du fichier
noeud_compose* charger_fichier_procede(FILE* fichier_procede)
{
	noeud_compose* procede=NULL;
	int x,code_compose,entre=vrai;
	liste_composant *l_c=NULL;
	information_composant composant;
	char test[5],valeur[35];
	assert(fichier_procede!=NULL);
	do//tant que x=!EOF le scan du fichier continue
 
	{
	    x=fscanf(fichier_procede,"%s %s",&test,&valeur); // le probleme se    
               //situe ici lorsque le prog passe de cette instruction au if
               //composant.code_composant change de valeur et prend 0 !!!
		if (strcmp(test,"code")==0 && strcmp(valeur,"compose")==0)
		{
			x=fscanf(fichier_procede,"%s",&valeur);
			code_compose=atoi(valeur);// conversion en valeur                  
                                                            //numerique
 
		}
 
		else
		{
			do // lecture des caracteristiques des composant tant qu'on      
                            //n'a pas atteint la fin du fichier
			{
				entre=faux;
 
				if (strcmp(test,"code")==0 &&  
                                  strcmp(valeur,"composant")==0)
				{
					x=fscanf(fichier_procede,"%s",&valeur);
					composant.code_composant=atoi(valeur);
 
					entre=vrai;
 
				strcpy(test," ");// re-initialisation de test && valeur 
				strcpy(valeur," ");
				}
				if (strcmp(test,"quantite")==0)
				{
					composant.qte=(float)atof(valeur);
 
 
 
				entre=vrai;
				strcpy(test," ");
				strcpy(valeur," ");
				}
				if (strcmp(test,"code")==0 &&       
                                   strcmp(valeur,"section")==0)
				{
					x=fscanf(fichier_procede,"%s %s                                       
                                          %s",&valeur,&valeur,&valeur);
					composant.code_section_usinage=atoi(valeur);
 
 
					entre=vrai;
 
					strcpy(test," ");
					strcpy(valeur," ");
				}
				if ( strcmp(test,"temps")==0)
				{
					x=fscanf(fichier_procede,"%s 
                                                     %s",&valeur,&valeur);
 
                              composant.temps_integration_composant=atoi(valeur);
					entre=vrai;
					ajouter_fin_liste_composant(&l_c,composant);
                                                              // ajout des caracteristiques   // dans la liste
					strcpy(test," ");					
					strcpy(valeur," ");										 
				}
 
			}
			while (entre==vrai);
		}
 
 
 
	}	while(x!=EOF);
 
	return (procede);// ici procede==NULL prcq je n'ai pas encore ecrit la //fct qui ajoute la liste dans l'arbre des procedes .
}
Lrsq j’execute ma fonction code.code_composant change de valeur et prend 0.
Je travaille avec visual 6 et lorsque j’ai essayé le meme code sous code ::blocks et ça a marché !!!!
Svp est ce que qlqn sait comment on peut resoudre ce probleme ?
merci