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 :

Liste simplement chainée


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 18
    Par défaut Liste simplement chainée
    Bonsoir,

    J'ai un problème au niveau d'une liste simplement chainée. 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
    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
    #include<stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
     
     
    struct _date
    {
       int jour;
       int mois;
       int annee;
    };
     
    typedef struct cm
    {
      char nom[20];
      char prenom[20];
      struct _date date;
    }cmp;
     
    typedef struct p
    {
     cmp compte;
     struct p *next;
    }liste_compte;
     
    cmp saisircmp()
        {
         cmp c;
         printf("saisissez votre nom : ");scanf("%s",&c.nom);
         printf("aisissez votre prenom : ");scanf("%s",&c.prenom);
         printf("aisissez la date ");
         printf("\t aisissez  le jour  : ");scanf("%d",&c.date.jour);
         printf("\t aisissez   le mois  : ");scanf("%d",&c.date.mois);
         printf("\t aisissez  le annee  : ");scanf("%d",&c.date.annee);
     
         return c;
        }
     void enregistre(cmp *c)
        {
          FILE *fichier =NULL;
          fichier = fopen("daba.txt","a");
     
              fprintf(fichier,"\t\t\tinformation sur le  compte\n ");
              fprintf(fichier,"prenom : %s \n nom : %s \n",c->prenom,c->nom );
              fprintf(fichier," date : %d / %d / %d \n",c->date.jour,c->date.mois,c->date.annee );
          fclose(fichier);
        }
    void ajouterCompte(liste_compte **tete)
        {
          liste_compte *nv=(liste_compte*)malloc(sizeof(liste_compte));
          nv->compte=saisircmp();
          enregistre(nv);
          nv->next=*tete;
          *tete=nv;
        }
     void afficher(liste_compte **tete)
        {
           liste_compte *temp=*tete;
          while(*temp!=NULL )
          {
            printf("prenom : %s \n nom : %s \n",*temp->prenom,*temp->nom );
            printf(" date : %d / %d / %d \n",*tete->date->jour,*tete->date->mois,*tete->date->annee );
            *temp=*temp->next;
          }
        }
     
     void  main(void)
    {
          liste_compte *tete=NULL;
        int i,c;
           for(i=1;i<3;i++)
          {
            printf("\n entrer un nombre ");
            scanf("%d",&c);
            switch(c)
            {
              case 1: ajouterCompte(&tete);
                     break;
              case 2:afficher(&tete);
                     break ;
              case 3:
                     c=0;
                     break;
            }
     
         }
    }
    Le problème est dans la fonction afficher().

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 104
    Billets dans le blog
    146
    Par défaut
    Bonjour,

    Un très bon conseil, dans la vie d'un programmeur : ne jamais laisser les avertissements du compilateur (warnings). Le mien rapport :
    main.c: In function ‘saisircmp’:
    main.c:30:6: attention : format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[20]’ [-Wformat=]
    printf("saisissez votre nom : ");scanf("%s",&c.nom);
    ^
    main.c:31:6: attention : format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[20]’ [-Wformat=]
    printf("aisissez votre prenom : ");scanf("%s",&c.prenom);
    ^
    main.c: In function ‘ajouterCompte’:
    main.c:53:7: attention : passing argument 1 of ‘enregistre’ from incompatible pointer type [enabled by default]
    enregistre(nv);
    ^
    main.c:39:7: note: expected ‘struct cmp *’ but argument is of type ‘struct liste_compte *’
    void enregistre(cmp *c)
    ^
    main.c: In function ‘afficher’:
    main.c:60:18: erreur: invalid operands to binary != (have ‘liste_compte’ and ‘void *’)
    while(*temp!=NULL )
    ^
    main.c:62:50: erreur: ‘liste_compte’ has no member named ‘prenom’
    printf("prenom : %s \n nom : %s \n",*temp->prenom,*temp->nom );
    ^
    main.c:62:64: erreur: ‘liste_compte’ has no member named ‘nom’
    printf("prenom : %s \n nom : %s \n",*temp->prenom,*temp->nom );
    ^
    main.c:63:47: erreur: request for member ‘date’ in something not a structure or union
    printf(" date : %d / %d / %d \n",*tete->date->jour,*tete->date->mois,*tete->date->annee );
    ^
    main.c:63:65: erreur: request for member ‘date’ in something not a structure or union
    printf(" date : %d / %d / %d \n",*tete->date->jour,*tete->date->mois,*tete->date->annee );
    ^
    main.c:63:83: erreur: request for member ‘date’ in something not a structure or union
    printf(" date : %d / %d / %d \n",*tete->date->jour,*tete->date->mois,*tete->date->annee );
    ^
    main.c: Hors de toute fonction :
    main.c:68:8: attention : return type of ‘main’ is not ‘int’ [-Wmain]
    void main(void)
    Les premières erreurs sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("saisissez votre nom : ");scanf("%s",c.nom);
    printf("aisissez votre prenom : ");scanf("%s",c.prenom);
    Sachant que c.nom et c.prenom sont des chaînes de caractères (donc des pointeurs), il n'y a pas besoin du '&'.

    Ensuite, ligne 55, vous passez un pointeur sur liste_compte, alors que la fonction accepte un pointeur sur cmp.
    Cela risque de mal se passer.
    Et ainsi de suite pour le reste. Sachant que le compilateur rapporte tous ses problèmes, d'ailleurs, chez moi cela ne compile pas, il faut donc les corriger et cela règlera déjà beaucoup de vos soucis.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    De plus, le type liste_compte ne désigne en fait pas une liste, mais un chaînon.
    Éviter de donner des noms inexacts aux types.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. fusion de deux liste simplement chainée
    Par mdh12 dans le forum Débuter
    Réponses: 6
    Dernier message: 14/01/2010, 19h23
  2. Tri d'une pile avec liste simplement chainée
    Par thecabbages dans le forum C
    Réponses: 3
    Dernier message: 17/12/2009, 21h08
  3. question liste simplement chainée
    Par american dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 15/03/2009, 21h45
  4. Réponses: 3
    Dernier message: 25/10/2006, 19h08
  5. Liste simplement chainée
    Par sorry60 dans le forum C
    Réponses: 54
    Dernier message: 29/11/2005, 22h05

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