Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ajouter une cellule à une liste chainée

    31 mars 2022 à 19:14:32

    Bonjour, je bloque à un truc que j'essaye de faire :

    J'essaye d'ajouter une cellule à une liste chaînée.

    Chaque cellule est une structure de donnée :

    struct electeur {
        char nom[50];
        long cin_num;
        int choix;
        struct electeur* suivant;
    };
    
    



    J'ai aussi défini le type

    typedef struct electeur* T_Electeur;

    A présent je veux créer une fonction pour ajouter une cellule à la fin : 

    void ajoutelecteur(T_Electeur *e, char nom_e[], long ci, int ch) {
    
        //printf("%s\n", nom_e);
        T_Electeur nouv_e = malloc(sizeof(struct electeur));
    
        T_Electeur last = *e;
    
        nouv_e->choix = ch;
        nouv_e->cin_num = ci;
        strcpy(nouv_e->nom, nom_e);
        nouv_e->suivant = NULL;
    
        if (*e == NULL) {
    
            *e = nouv_e;
            return;
        }
    
    
        while (last->suivant != NULL) {
            last = last->suivant;
        }
    
        last->suivant = nouv_e;
        return;
    
    
    
    }


    Problème, ma cellule n'est pas ajoutée. J'ai crée une fonction pour afficher ma liste :

    void afficheliste(T_Electeur e) {
        printf("Affiche liste\n");
        printf("Nom :\n");
        if (e == NULL) {
            printf("NULL");
        }
        else {
            while (e != NULL) {
                printf("%s\n", e->nom);
                e = e->suivant;
            }
        }
    
    }

    Rien ne s'affiche.

    Je remarque aussi en faisant des printf que ma fonction

    ajoutelecteur

     s'arrête après la boucle while.

    Je ne vois pas comment corriger mon soucis (ajouter une cellule à une liste chaînée en ayant un double pointer en paramètre).

    Merci.



    -
    Edité par NEATPlus 31 mars 2022 à 19:15:12

    • Partager sur Facebook
    • Partager sur Twitter
      31 mars 2022 à 20:06:07

      Bonjour,

      Il ne semble pas y avoir de problème dans le code que tu montres.
      Es tu sûr de passer les bons paramètres lors de l'appel à ajoutelecteur()?
      N'as tu pas de warning au moment de la compilation?

      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

        31 mars 2022 à 21:10:25

        Ton code est fonctionnel, le problème est ailleurs !
        • Partager sur Facebook
        • Partager sur Twitter
        ...
          1 avril 2022 à 3:34:41

          Je serais curieux de savoir comment tu initialises ta liste.
          Et ce que tu passes à ta fonction (du moins la première fois)

          C'est toujours plus compliqué quand on n'a pas de descripteur de liste.
          Je ne crois pas que ce soit une bonne idée que de définir un type "pointeur vers structure".
          Voici un exemple hyper simple qui fonctionne:
          -
          #include <stdio.h>
          #include <stdlib.h>
          typedef struct Node Node;
          struct Node {
              int val;
              Node *next;
          };
          void add(Node **head, int val) {
             Node *new = malloc(sizeof(Node));
              new->val = val;
              new->next = NULL;
              *head = new;
          }
          void lst(Node **head) {
              Node *node = *head;
              while(node) {
                  printf("%d\n", node->val);
                  node = node->next;
              }
          }
          int main(void) {
              Node *head =NULL;
              add(&head, 3);
              lst(&head);
          }

          -
          Edité par PierrotLeFou 1 avril 2022 à 4:17:24

          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

          Ajouter une cellule à une liste chainée

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown