begin process at 2012 05 30 03:47:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Liste chainée


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Liste chainée

jeudi 22 juin 2006 à 21:39:31 | Liste chainée

mayapour

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
jeudi 22 juin 2006 à 23:16:36 | Re : Liste chainée

rrk275

Réponse acceptée !
Moi je peux ajouter et visualiser mais j'ai changer le printf("%s") en %c car sinon il cherche un  \0 ...

jeudi 22 juin 2006 à 23:25:22 | Re : Liste chainée

24Karas

tu stock 1 caracter (char) dans la structrure et tu veux stocker une chaine (char *)
faut allouer pour stocker des chaines.
puis pour trier utiliser memcmp, ...

      char val; // != de char *

++
jeudi 22 juin 2006 à 23:41:36 | Re : Liste chainée

mayapour

Merci ça fonctionne :-D


Cette discussion est classée dans : printf, val, tmp, next, listelogin


Répondre à ce message

Sujets en rapport avec ce message

aide petit prog c [ par mayapour ] Bonjour, Débutant en C, je souhaiterai savoir comment changer ce programme initiale (liste chainée) qui demande à l'utilisateur de choisir les optio Problème avec la fonction read du C sous linux. [ par bouba ] Bonjour, j'ai un problème que je ne comprend pas avec la fonction read, le problème vient lorsque j'essai de lire 4 ocets à mettre dans un entier.J'es [PB] telecharger une image [ par sebastienmz ] Bonjour a toutes et a tous !voila j'ai du code qui télécharge l'image qui se trouve en haut de votre écran de cppfrance a gauche de fiche mais j'arriv Probléme d'algorithme d'ordonnacement [ par salero ] Bonjour, bon je travaille sur un mini projet qui consiste a gérer des processu par des algorithme d'ordonnacement ( fcfs,sjf....) et pour cela je  cre besoin d'aide : liste chainée [ par SemBy ] salutjutilse une liste chainée pour pouvoir traité une structure.declaration de ma structure :struct etu{ char nom[25]; char prenom[25]; Problème de lecture fichier [ par nach73 ] J'ai un enorme probleme je n'arrive pas a lire dans mon fichierVoila la partie de mon programme.Si quelqu'un peux m'aide.Merci.//ouverture du fichier supprimer dans un fichier [ par juju0612 ] donc voila mon programme fais une gestion d'un club de foot!!donc ici c pour supprimer des joueurs.tout marche sauf que j'ai un probleme avec ma fonct fonction supprime tous!! [ par juju0612 ] bonjour à tous!!!voila ma fonction supprimer doit supprimer que le nom que je lui donne mais il supprime tous!!et je ne vois pas pourquoi!!comment res calculatrice [ par abdelali62 ] BONJOUR en faite je suis un débutant en programmation en C et je veux que quelqu'un me corrige ce petit programme s'il vous plais#include #include int Programme c++ débutant ! [ par Farqual ] Bonjour, voila j'ai essayé de faire un programme en c++ mais quelques petites choses ne marchent pas !Voila mes problèmes :Le programme s'éteint juste


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,160 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales