Bonjour,
Je souhaite faire une liste chainée d'utilisateurs et pouvoir mettre à blanc, ajouter, supprimer, lister et trier cette liste.
En faite quand je veux ajouter et visualiser ma liste, j'ai un "Segmentation fault" !
Quelqu'un a une idée de l'erreur ?
#include<stdio.h>
#include<malloc.h>
#define Faux 0
#define Vrai 1
typedef struct listelogin{
char val;
struct listelogin *next;
}listelogin;
int estVide(listelogin* L){
if(L == NULL){
return Vrai;
}
else{
return Faux;
}
}
void InitListe(listelogin **L){
if(!estVide(*L)){
InitListe(&((*L)->next));
*L = NULL;
}
}
void Ajouter(listelogin **L, char v){
listelogin *tmp = *L;
listelogin *nouveau = (listelogin*)malloc(sizeof(listelogin));
if(nouveau == NULL){
exit(1);
}
nouveau->val = v;
nouveau->next = NULL;
if(estVide(*L)){
*L = nouveau;
}
else{
tmp = *L;
while(tmp->next != NULL){
tmp = tmp->next;
}
tmp->next = nouveau;
}
}
void Trier(listelogin **L){
listelogin *tmp1, *tmp2;
listelogin *Min;
char t;
tmp1 = *L;
while(tmp1 != NULL){
Min = tmp1;
tmp2 = tmp1;
while(tmp2 != NULL){
if(Min->val > tmp2->val) Min = tmp2;
tmp2 = tmp2->next;
}
t = tmp1->val;
tmp1->val = Min->val;
Min->val = t;
tmp1=tmp1->next;
}
}
void Supprimer(listelogin **L, char v){
listelogin *tmp;
int d;
if(!estVide(*L)){
tmp = *L;
d = 0;
if(tmp->val == v){
*L = (*L)->next;
}
else{
while( d == 0 && tmp->next != NULL){
if(tmp->next->val == v) d = 1;
else tmp = tmp->next;
}
if(d == 1) tmp->next = tmp->next->next;
else printf(" !cette valeur n'est pas trouvable!\n");
}
}
else{
printf(" !La liste est vide. Impossible de faire la suppression!\n");
}
}
int Longueur(listelogin *L){
int l=0;
listelogin *tmp = L;
while(tmp != NULL){
l++;
tmp = tmp->next;
}
return l;
}
void Afficher(listelogin *L){
listelogin *tmp;
if(estVide(L)){
printf("!la liste est vide!\n");
}
else{
tmp = L;
while(tmp != NULL){
printf("%s ",tmp->val);
tmp = tmp->next;
}
}
}
int main(){
listelogin *L = NULL;
int choix;
char *fichier;
char v;
do{
printf("1-Nouvelle Liste.\n");
printf("2-Ajouter login.\n");
printf("3-Supprimer login.\n");
printf("4-Trier la Liste.\n");
printf("5-Afficher.\n");
printf("0-Quitter.\n");
printf(" -->choix(0-5):");scanf("%d",&choix);
switch(choix){
case 1:InitListe(&L);
break;
case 2:printf(" - Entrer une valeur : "); scanf("%s",&v);
Ajouter(&L, v);
break;
case 3:printf(" - Entrer une valeur : "); scanf("%s",&v);
Supprimer(&L,v);
break;
case 4:Trier(&L);
break;
case 5:Afficher(L);
break;
}
}while(choix != 0);
return 0;
}
Merci