Bonjour, comme ceci est mon premier message sur developpez, je me présente, je m'appelle maxime maréchal.
J'ai un devoir à faire sur des listes doublements chainées, sous la forme d'un petit programme de gestion de stock de produits.
dans ce programme tout ce fait via une structure "produit".
Mais après l'insertion en début, ou en fin de liste, et l'affichage de la liste, viens la recherche par la 'designation' du produit (une variable contenant le nom du produit) ex:popo.
Sur mon code, à la fonction consulter_produit(la dernière), un petit problème surviens, selon un compilateur, ma variable contenu dans p->designation ne semble pas vouloir se comparer, dans le if, avec la variable 'des', scan d'une chaine.
Selon le compilateur, p->designation renvoi 2 valeurs, celle enrengistrée directement dans le programme (ex: p->designation=popo), et NULL..
voici mon code
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// Structure de la liste Produit
typedef struct produit
{
       char designation[30];
       char ref[10];
       float prix;
       int qte;
       struct produit *suivant, *precedent;
}produit;
produit *tete_stock = NULL;
 
// Les Signatures des Fonctions et Procédures
void menu_general();
void ajout_debut();
void ajout_fin();
void afficher_stock();
void consulter_produit();
void supprimer_produit();
int nb_elements();
void vider_liste();
float total_stock();
void trier_par_designation();
void quitter();
 
// Main
int main()
{
    menu_general();
    return 0;
}
 
// Menu General
void menu_general()
{
     int choix;
     do {
         system ("cls");
         system ("color 3");
         printf("\n\t\t°°°°°°°°°° MENU °°°°°°°°°°");
         printf("\n\t\t° 1 - Ajout Debut        °");
         printf("\n\t\t° 2 - Ajout Fin          °");
         printf("\n\t\t° 3 - Afficher Stock     °");
         printf("\n\t\t° 4 - Consulter Produit  °");
         printf("\n\t\t° 5 - Supprimer Produit  °");
         printf("\n\t\t° 6 - Nombre Elements    °");
         printf("\n\t\t° 7 - Vider Liste        °");
         printf("\n\t\t° 8 - Total Stock        °");
         printf("\n\t\t° 9 - Tri pas Designation°");
         printf("\n\t\t° 0 - Quitter            °");
         printf("\n\t\t°°°°°°°°°°°°°°°°°°°°°°°°°°");
 
         printf("\n\t\t Votre choix -->");
         scanf("%d", &choix);
 
         switch (choix)
         {
                case 1 :
                     ajout_debut();
                     break;
                case 2 :
                     ajout_fin();
                     break;
                case 3 :
                     afficher_stock();
                     break;
                case 4 :
                     consulter_produit();
                     break;
                /*case 5 :
                     supprimer_produit();
                     break;
                case 6 :
                     printf("Le nombre d'elements est de : %d", nb_elements());
                     break;
                case 7 :
                     vider_liste();
                     break;
                case 8 :
                     printf("Le total du stock est de : %f", total_stock());
                     break;
                case 9 :
                     trier_par_designation();
                     break; */
                case 0 :
                    quitter();
                    break;
         }
         system("pause");                      
         }while (choix !=0);      
}
void quitter()
{
        printf("\n---   REALISE PAR MARECHAL, MERCI  ---\n");
        system("pause");
        exit(EXIT_SUCCESS);
}
// Ajout Debut
void ajout_debut()
{
    produit *p;
    p =(produit *) malloc(sizeof(produit));
    printf("Donner le Nom du produit: ");
    scanf("%s", &p->designation); 
    printf("Donnez la reference du produit: ");
    scanf("%s", &p->ref);
    printf("Donner le prix: ");
    scanf("%f", &p->prix);
    printf("Donner la quantite: ");
    scanf("%d", &p->qte);
 
  if (tete_stock == NULL)
  {
      p->precedent = NULL;
      p->suivant = NULL;
      tete_stock = p;
  }
  else
  {
      p->precedent = NULL;
      p->suivant = tete_stock;
      tete_stock = p;
  }
  printf("Le produit a ete ajouter en debut de liste. \n");
}
 
// Ajout Fin
void ajout_fin()
{
    produit *p, *q;
    p = (produit*)malloc(sizeof(produit));
    printf("Donner le Nom du Produit:");
    scanf("%s", &p->designation);
    printf("Donner la reference:");
    scanf("%s", &p->ref);
    printf("Donner le prix:");
    scanf("%s", &p->prix);
    printf("Donner la quantite:");
    scanf("%d", &p->qte);
 
  if (tete_stock == NULL)
  {
      tete_stock = p;
      p->suivant = NULL;
      p->precedent = NULL;
  }
  else
  {
      q=tete_stock;
           while (q->suivant != NULL)
           {q=q->suivant;}
 
           q->suivant = p;
           p->precedent = q;
           p->suivant = NULL;
  }
  printf(" Le Produit a ete ajoute en fin de liste. \n");          
}
 
// Afficher
void afficher_stock()
{
    produit *p;
 
    p = (produit*)malloc(sizeof(produit));
      p = tete_stock;
           while (p != NULL)
           { 
                 printf("\n Nom du produit : %s ", p->designation);
                 printf("\n Reference : %s ", p->ref);
                 printf("\n Prix : %f ", p->prix);
                 printf("\n Quantite : %d ", p->qte);
                 printf("\n------------------------------------------\n");
                 p = p->suivant;
           }
}
 
// Consulter
void consulter_produit()
{
     produit *p;    
    // p = (produit*)malloc(sizeof(produit));
     p=tete_stock;
     char des[30]="";
     int trouve=0; // Booléen, 0:faux, 1:vrai
 
     printf("\nQuel est le nom du produit que vous recherchez?\n");
     fflush(stdin); //vider la memoire du clavier
     scanf("%s", &des);
     printf("%s", des);
     while((p != NULL) && (trouve == 0))
     {
              printf("%s", p->designation);
              system("pause");
                   if(des==p->designation)
                   {
                      trouve=1;
                   }
                   else
                   {
                       p=p->suivant;
                   }
 
     }
      printf("%s", p->designation);
      printf("%d", trouve);
     if(trouve==0)
     {
                 printf("\nProduit innexistant\n");
     }
     else
     {
         printf("\nProduit trouve\n");
         printf("\n------------------------------------------\n");
         printf("\n Nom du produit : %s ", p->designation);
         printf("\n Reference : %s ", p->ref);
         printf("\n Prix : %f ", p->prix);
         printf("\n Quantite : %d ", p->qte);
 
     }
}
Je pense qu'il s'agit ici d'une simple erreur de syntaxe, et après 3h de recherche, je vous livre mon problème en esperant que vous pourriez m'aider.
En tout cas merci, et n'importe quel remarque, même sans solution, m'aiderait.
smacks1991