Bonjour,

j'écris un programme en C qui recherche les caractéristiques d'un produit à partir de son code en utilisant la recherche dichotomique( laquelle méthode consiste à rechercher un élément du tableau à partir du milieu.Si on ne trouve pas le code dans la première moitié du tableau , on passe à la seconde moitié ) . Mais ,j'ai un problème avec la mémoire car à la place du libellé du premier produit , j'ai entièrement des chiffres . Après cela , il n'y a plus de problème aux autres lignes ; juste la première.Voici , mon code accompagné d'une capture d'écran .
voici mon code en pièce jointe
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
137
138
139
140
141
142
143
144
145
146
147
148
149
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 4
#include "dichotomie2.h"
struct produit 
{
char nom[30] ; 
float prix  ; 
long code ;
 
} ;
 
 
main()
{
 
char rep;
      int i=0 ,j=0 ;
long change_code=0 ;
float change_prix=0 ;
char change_nom[100] ;
struct produit produit[max]=
 
{
 "avion",13049.459,12 ,
 "moto",330000,03 ,
 "ordinateur",600000,11,
 "portable",40000,14      
 
 
 
 
}; 
 
printf("\n");printf("\n");printf("\n");
printf("*************** %conner les caract%cristiques de vos produits********** \n" ,68 ,130);
printf("\n");
for(i=0;i<max ;i++)
{
printf("%ces carat%cristiques du produit  %d" ,76,130, i+1);
 
printf("\n");
printf("\n");
printf("***************%conner le libell%c du  produit %c %d   " ,68,130 ,248 , i+1);
 
fgets(produit[i].nom , 40 ,stdin  ) ;
vide_buffer() ;
printf("\n");
printf("%connez le code de %s   ",68 ,produit[i].nom );
 
 
scanf("%5d" ,  &produit[i].code   ) ;
vide_buffer() ;
printf("\n");
 
 
 
printf("%connez le prix  de %s  ",68 ,produit[i].nom );      
 
 
scanf("%5f"  ,&produit[i].prix ) ;
vide_buffer() ;
printf("\n");printf("\n");
 
}
 
/*On range les articles par ordre croissant */
for(i=0;i<max-1;i++ )
{
 for(j=i+1;j<=max;j++ )
{
  if( produit[i].code>produit[j].code     ) 
   {
     /*on range les codes par ordre croissant */
     change_code=produit[i].code  ;
     produit[i].code =produit[j].code ;
     produit[j].code= change_code; 
     /*On range les prix par ordre croissant */
     change_prix=produit[i].prix ;
   produit[i].prix=produit[j].prix ; 
    produit[j].prix=change_prix;
    /*On échange les libellés des produits  */ 
    strcpy (change_nom , produit[i].nom ) ;
    strcpy (produit[i].nom,  produit[j].nom) ;
    strcpy (produit[j].nom ,change_nom ) ;
   }
 
 
}
 
 
}
 
printf("%ca liste de vos produits par code croissant \n\n" ,76);  
 
printf("%20s%10s%40s" ,"prix" ,"code","libelle" );   
printf("\n");    
 for(i=0;i<max;i++ )
{       
printf("%20f%10d%40s" , produit[i].prix ,produit[i].code , produit[i].nom);
printf("\n");
printf("\n");        
 
}      
int size=max/2;
 
long code_recherche=0;
do
{
     i=0;
 printf("%ce code recherch%c ",76,130); 
 scanf("%d" ,&code_recherche); 
 while(produit[i].code!=code_recherche && i<size){i++ ;}
 if( i>=size  )
 {
  i=max-1;
 
 while(produit[i].code!=code_recherche && i>=size){i--;} 
 if( i<size  ) {
printf("%crticle de code %d n\'existe pas \n",65,code_recherche);  }
 else{   
 
printf("%crticle de code %d\n",65,code_recherche); 
  printf("libell%c:%s\n",130,produit[i].nom);
  printf("prix : %f" ,produit[i].prix  );    
  printf("\n");printf("\n");
          }
 
 }
else
{
 
printf("%crticle de code %d\n",65,code_recherche); 
  printf("libell%c:%s\n",130,produit[i].nom);
  printf("prix : %f" ,produit[i].prix  );    
  printf("\n");printf("\n");
 
 
 
}
vide_buffer() ;
printf("%coulez vous recommencer (o/n) \n",86);
scanf("%c",&rep);
}while(rep=='o') ;   
 
system("dichotomie2");
return 0;
}