Salut à tous, je suis un étudiant en développement informatique.

j'étais en train de coder cet exercice en langage C :

L'exercice :
1- Créer une énumération couleur avec la liste suivante :

-Jaune / -Noir
-Rouge /-Blanc
-Bleu

2- Modifier la structure voiture afin d’ajouter le champ couleur v de type couleur ;

3- Écrire un programme qui permet de saisir les données d’une voiture et de les afficher ensuite dans une seule ligne ;

4- Écrire un programme qui permet de remplir un tableau de voitures et de donner la possibilité de modifier et supprimer une voiture selon son matricule ;
Bon, j'ai tout terminé. Le seul problème que j'ai eu consiste en la dernière tâche dans cet exercice : la suppression d'une voiture selon son matricule. Quand j'enregistre plusieurs voitures dans mon pointeur structuré et que j'essaie de supprimer une voiture que j'ai enregistrée, je reçois une erreur et même si je n'entre que 3 voitures et que j'essaye de supprimer la deuxième, les deux chaines de caractères Matricule et Marques ne s'affichent pas :/ ou parfois affichent des caractères bizarre.

Voila 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef enum clr {jaune,noir,rouge,blanc,bleu}couleur;
 
typedef struct
{
char *Marque;
char *Matricule;
int nbr_chevaux;
couleur coul;
}voiture ;
 
void viderBuffer()
{
    int c = 0;
 	   while (c != '\n' && c != EOF)
 	   {
     	   c = getchar();
    }
}
 
int main(int argc, char *argv[])
{
  voiture *v; //declaration d'un pointeur structuré - comme un tableau -
  v=calloc(1,sizeof(voiture));
  char *rep=malloc(1);
  int i=0,j,y,R,t;
 
do
{
  R=0;
 
  printf("\t\t\t  ..::-Menu-::..\n\n 1- Ajouter une voiture.\n 2- Supprimer une voiture.\n 3- Modifier les infos d'une voiture.\n 4- Quitter le programme .\n\n Votre Choix -> "); 
  scanf("%d",&R);
  viderBuffer();
 
  switch (R)
  {
   case 1 : 
    { 
 
         (v+i)->Marque=malloc(1);
         (v+i)->Matricule=malloc(1);
 
         printf("\n\nLa Marque de la voiture > ");
         gets((v+i)->Marque);
 
         printf("Le Matricule de la voiture > ");
         gets((v+i)->Matricule);
 
         printf("Le Nombre de chevaux > ");
         scanf("%d",&(v+i)->nbr_chevaux);
 
         printf("La couleur de la voiture : 0-jaune / 1-noir / 2-rouge / 3-blanc / 4-bleu.\n> ");
         scanf("%d",&(v+i)->coul);
         viderBuffer();
         i++;
     }break;
 
  case 2 :
  {
       printf("Entrer le matricule de la voiture que vous voulez supprimer > ");
       gets(rep);
 
       for(j=0;j<i+1;j++)
       {
         if(strcmp(rep,(v+j)->Matricule)==0)
           {
              for(y=j;y<i;y++) // la boucle permet de supprimé la voiture qui a le matricule saisi par l'utulisateur 
                {
                  v[y]=v[y+1]// elle remplace la voiture du matricule choisi par celle qui la suit 
 
                  /*strcpy((v+y)->Marque,(v+y+1)->Marque);  j"ai essayer champs par champs aussi et sa marche pas 
                  strcpy((v+y)->Matricule,(v+y+1)->Matricule);
                  (v+y)->nbr_chevaux=(v+y+1)->nbr_chevaux;
                  (v+y)->coul=(v+y+1)->coul;*/
                }
 
                printf("Voiture supprimer !!\n\n");
                i--;
                break;
            }
        }
 
          free(rep);
       }break;
 
  case 3 :
       {
              viderBuffer();
              printf("Entrer le matricule de la voiture que vous voulez Modifier > "); // modification des infos d'un voiture selon le matricule
              gets(rep);
 
              for(j=0;j<i+1;j++)
              {
                           if(strcmp(rep,(v+j)->Matricule)==0)
                           {
                                              printf(" \n\nChoisissez ce que vous voulez changer : \n1- Marque.\n2- Matricule.\n3- Nombre de chevaux.\n4- Couleur de la voiture.\nChoix > ");
                                              scanf("%d",&t);
                                              viderBuffer();
                                              switch (t)
                                              {
                                                     case 1 : 
                                                     {                                                         
                                                          printf("Marque > ");
                                                          gets((v+j)->Marque);
                                                     }break;
 
                                                     case 2 :
                                                     {
                                                          printf("Matricule > ");
                                                          gets((v+j)->Matricule);
                                                     }break;
 
                                                     case 3 :
                                                     {
                                                           printf("Nombre de chevaux -> ");
                                                           scanf("%d",&(v+j)->nbr_chevaux);
                                                           viderBuffer();
                                                     }break;
 
                                                     case 4 : 
                                                      {
                                                            printf("Couleur de voiture");
                                                            scanf("%d",&(v+j)->coul);
                                                            viderBuffer();
                                                      }break;
 
                                                      default : printf("Invalid Touche\n\n");
                                                 }
                              printf("\n\t\t\tChangement Enregistrer !!\n\n");
                              break;
                        }
          }
    }break; 
 
   case 4 : printf("\n\n\t\t\tA Bientot :) \n\n");break;
 
   default : printf("\t\t\tErreur : \n La valeur que vous venez de saisire n'existe pas dans le menu !!\n\n\n");
}
}
while(R!=4);
 
printf("infos sur les voitures existante : \n"); 
 
for(y=0;y<i+1;y++)
 printf("\nVoiture Numero %d : Marque %s | Couleur %d |Matricule %s | Nbr de chevaux %d \n\n",y+1,(v+y)->Marque,(v+y)->coul,(v+y)->Matricule,(v+y)->nbr_chevaux);
 
  system("PAUSE");	
  return 0;
}
Je cherche à trouver la cause de cette erreur que je reçois et vous pouvez même me donner des remarques sur ce travail avec des infos pour mieux le gérer , Merci d'avance pour votre aide !!