IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Afficher une liste


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 19
    Par défaut Afficher une liste
    Bonjour,
    Je n'arrive pas à comprendre pourquoi ma liste ne veut pas s'afficher... Et je commence à désespérer.
    Merci pour votre aide.
    Voici le code :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct maille Maillon;
    typedef Maillon* Liste;
     
    struct maille{
    	int valeur;
    	struct maille *suivant;
    };
     
    typedef struct element element;
    struct element
    {
        int val;
        struct element *nxt;
    };
     
    typedef element* llist;
     
    Liste ajouterEnTete(Liste liste, int v)
    {
        /* On crée un nouvel élément */
        Maillon* nouvelElement = malloc(sizeof(Maillon));
     
        /* On assigne la valeur au nouvel élément */
        nouvelElement->valeur = v;
     
        /* On assigne l'adresse de l'élément suivant au nouvel élément */
        nouvelElement->suivant = liste;
     
        /* On retourne la nouvelle liste, i.e. le pointeur sur le premier élément */
        return nouvelElement;
    }
     
    void afficherListe(Liste liste)
    {
        Maillon *tmp = liste;
        /* Tant que l'on n'est pas au bout de la liste */
        while(tmp != NULL)
        {
            /* On affiche */
            printf("%d ", tmp->valeur);
            /* On avance d'une case */
            tmp = tmp->suivant;
        }
    }
     
    int main(int argc, char *argv[])
    {
        Liste ma_liste = NULL;
        ajouterEnTete(ma_liste, 15);
        ajouterEnTete(ma_liste, 50);
        ajouterEnTete(ma_liste, 24);
        afficherListe(ma_liste);
     
      system("PAUSE");	
      return 0;
    }
    Merci d'avance.

  2. #2
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Tu n'assignes jamais rien à "ma_liste" (Tu vois bien que tu retournes un résultat un résultat à ajouterEnTete et que tu n'en sert pas)

    Tu pourrais faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int main(int argc, char *argv[])
    {
        Liste ma_liste = NULL;
        ma_liste = ajouterEnTete(ma_liste, 15);
        ma_liste = ajouterEnTete(ma_liste, 50);
        ma_liste = ajouterEnTete(ma_liste, 24);
        afficherListe(ma_liste);
     
      return 0;
    }
    Ou passer directement une référence de "ma_liste" à ajouterEnTete pour l'assigner directement

  3. #3
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Bonjour,

    Le problème vient du fait que le printf ne s'affiche que lorsque son buffer est plein...

    Pour y remédier et forcer l'affichage, un retour à la ligne suffit.
    Voici le code modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void afficherListe(Liste liste)
    {
        Maillon *tmp = liste;
        /* Tant que l'on n'est pas au bout de la liste */
        while(tmp != NULL)
        {
            /* On affiche */
            printf("%d ", tmp->valeur);
            /* On avance d'une case */
            tmp = tmp->suivant;
        }
        printf("\n");
    }
    Et +1 avec la remarque si dessus, ta fonction renvoi un type Liste, or tu ne l'affecte jamais, ta liste n'est donc pas remplie

    Une fois ces deux modifications apportées, ton code fonctionnera (j'ai testé )

    ++
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  4. #4
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 19
    Par défaut
    Merci bien. En effet c'est tout bête. Bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [STL]Afficher une liste de listes avec copy
    Par boromir73 dans le forum SL & STL
    Réponses: 3
    Dernier message: 27/10/2006, 15h23
  2. Recheche commande AWK pour afficher une liste de fichiers
    Par Krispy dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 21/07/2006, 11h36
  3. [VB]Afficher une liste dans une boite de dialogue
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 05/04/2006, 11h30
  4. [PHP-JS] Afficher une liste sur la page ?
    Par bzoler dans le forum Langage
    Réponses: 7
    Dernier message: 27/01/2006, 09h41
  5. [VB]Ja'imerais afficher une liste d'éléments...
    Par STRUFIELD dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/01/2006, 18h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo