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 :

les listes chainées


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Points : 6
    Points
    6
    Par défaut les listes chainées
    bonjour je fais un programme des chainnee pour inserer des personnes avec leur nom et adresse mais ca des resultats bizarres dans l'execution 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
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<conio.h>
     
     typedef struct noeud
     { char nom[25];
       char adr[25];
       struct noeud  *suivant;
    }personne;
     
    personne *premier=NULL;
     
     
     
    void inserDeb(char nom[],char adr[])
    {
         personne *p;
     
         p=(personne *)malloc(sizeof(personne));
         strcpy(p->nom,nom);
     
         p->suivant=premier;
         premier=p;
     
    }
     
    void inserFin(char nom[],char adr[])
    {
        personne *p;
        p=(personne *)malloc(sizeof(personne));
        strcpy(p->nom,nom);
     
        p->suivant=NULL;
     
        personne *save;
        //save=p;
        save=premier;
        if(premier!=NULL){
            while(save->suivant!=NULL)
            {
          save=save->suivant;
            }
        save->suivant=p;
                        }
        else
          premier=p;
     
     
    }
     
    void afficher()
        {personne *p;
        p=premier;
        while(p!=NULL)
         {
     
    printf("\n %s \t %s", p->nom,p->adr);
    p=p->suivant;
         }
         }
     
     
     
     
     main()
    {
    char nom[25];char adr[25];
     
          printf("donner le nom  du personne:");
          scanf("%s",nom);
          printf("donner  l'adresse du personne:");
          scanf("\n%s",adr);
     
     
         inserFin(nom,adr);
         afficher();
     
     
    }

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Tout d'abord, tu n'enregistres pas l'adresse dans la cellule, donc à l'affichage, il y aura n'importe quoi en guise d'adresse.
    Ensuite tu ne contrôles jamais la taille des valeurs entrées ni le résultat de malloc(), de ce fait tu t'exposes à des problèmes.

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Points : 6
    Points
    6
    Par défaut
    je n'ai pas compris ce que tu veux dire est ce que tu peux m'ecrire les parties dont tu viens de parler

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par ayoub boss Voir le message
    je n'ai pas compris ce que tu veux dire est ce que tu peux m'ecrire les parties dont tu viens de parler
    Dans les fonctions inserFin() et inserDeb(), tu passes l'adresse en paramètre mais tu ne fais rien du paramètre adr et le champ adr de la structure n'est pas initialisé et contient donc n'importe qui.

    La fonction malloc() retourne NULL en cas d'erreur. Il faut donc tester cette valeur et agir en conséquence. Ici, en cas d'échec du malloc() tu vas utiliser le pointeur comme si de rien n'était et c'est une erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char nom[25];
    printf("donner le nom  du personne:");
    scanf("%s",nom);
    Ici, si je saisis plus de 25 caractères, le programme écris en dehors de la variable nom et c'est là encore une erreur.

Discussions similaires

  1. les listes chaines en c++ builder
    Par touf213 dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/07/2007, 18h06
  2. Toujours les listes chainées
    Par KindPlayer dans le forum C
    Réponses: 2
    Dernier message: 26/02/2007, 10h00
  3. des questions sur les listes chainées
    Par hunter99 dans le forum C
    Réponses: 13
    Dernier message: 05/12/2006, 22h51
  4. les listes chaineés(structures)
    Par snakemetalgear dans le forum C
    Réponses: 18
    Dernier message: 14/11/2006, 18h09
  5. les listes chainées
    Par najwWa dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 22/03/2006, 19h09

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