liste chainnee et linux(gcc), pb.
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:
Code:
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;
} |
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.
si quelqu'un peu m'aider merci.