Salut tout le monde.
Bon voila dans le cadre de mon cours de c, un petit exercice consiste a gerer une liste simplement chainée.
J'ai le petit probleme suivant sous linux:
lors du choix 2 (supression d'un element), une partie du code me semble "skipée" et le menu principale s'affiche.
voici le code:
a savoir aussi qu si je le compile a l'ecole, borland, je n'ai aucune erreurs et le menu se s'affiche pas deux fois de suite.
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 #include <stdio.h> //#include <conio.h> #include <stdlib.h> #include <string.h> #define MAX 20 struct liste{ char nom[MAX]; struct liste *PtrSvt; }; int main(void){ char Menu, Temp[MAX]; struct liste *PtrNv, *PtrDeb,*PtrSav, *Ptr; PtrDeb=NULL; printf("bienvenue dans l exercice sur les listes chainees\n\n" "menu:\n\n" "1: ajout dans la liste.\n" "2: supression dans la liste\n" "3: impression de la liste\n" "4: fin\n" "\nFaites votre choix: "); scanf("%c", &Menu); fflush(stdin); for(;;){ switch(Menu){ case '1': printf("entrez un nom : (zzzz pour terminer) "); fflush(stdin); gets(Temp); while(strcmp(Temp,"zzzz")){ PtrNv=(struct liste *)malloc(sizeof(struct liste)); if(PtrNv != NULL){ strcpy(PtrNv->nom,Temp); PtrNv->PtrSvt=PtrDeb; PtrDeb=PtrNv; } else printf("Plus de place menoire\n"); printf("entrez un nom : (zzzz pour terminer) "); fflush(stdin); gets(Temp); } break; case '2': printf("entrer le mot à suprimer: "); fflush(stdin); fgets(Temp, sizeof(Temp), stdin); //recherche du nom dans la liste Ptr=PtrDeb; while((Ptr!=NULL)&&(strcmp(Temp,Ptr->nom))){ PtrSav=Ptr; Ptr=Ptr->PtrSvt; } //supression du chainon if(Ptr==NULL) printf("Ce nom n'existe pas!\n"); else{ if(Ptr==PtrDeb) PtrDeb=PtrDeb->PtrSvt; else PtrSav->PtrSvt=Ptr->PtrSvt; } free(Ptr); break; case '3': if(PtrDeb==NULL) printf("liste vide\n"); else{ Ptr=PtrDeb; while(Ptr!=NULL){ puts(Ptr->nom); Ptr=Ptr->PtrSvt; } } printf("\n"); break; case '4': printf("Au revoir\n"); exit(0); break; default: printf("mauvais choix\n"); } printf("menu:\n\n" "1: ajout dans la liste.\n" "2: supression dans la liste\n" "3: impression de la liste\n" "4: fin\n" "\nFaites votre choix: "); scanf("%c", &Menu); fflush(stdin); } //getch() return 0; }
si quelqu'un peu m'aider merci.
Partager