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 :

un probléme de liste chainé simple


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Par défaut un probléme de liste chainé simple
    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
    89
    90
    91
    92
     
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<stdlib.h>
    struct liste
    { char name[10];
      char prenom[10];
      char bdate[10];
      char code[5];
      char sexe;
      int nbe;
      char enfcode[30];
      struct liste *suiv;
    };
    /* fonction qui ajoute une personne a la liste chain‚e */
    /*d‚but de la fonction */
    void ajout(struct liste **org)
    {
    	struct liste *parc;
    	struct liste *rc;
    	int i,cc;
    	char aux[10];
    	char cd[10];
     
     
     
     
     
     
    	parc=(struct liste*)malloc(sizeof(struct liste));
            if(parc != NULL)
    	{
    		parc->suiv=NULL;
    		puts("donnez le nom de la nouvelle personne");
    		scanf("%s",parc->name);
    		puts("donnez le prenom de la nouvelle personne");
    		scanf("%s",parc->prenom);
    		puts("donnez la date de naissance de la nouvelle personne");
    		scanf("%s",parc->bdate) ;
    		puts("donnez le code de la nouvelle personne");
    		scanf("%s",parc->code);
    		puts("donnez le sexe de la nouvelle personne");
    		parc->sexe=getch();
    		puts("donnez le nombre d'enfants de la nouvelle personne");
    		scanf("%d",&cc);
    		parc->nbe=cc;
    		for(i=0;i<cc;i++)
    		{
    			printf("\ndonner le code de ces enfants");
    			scanf("%s",aux);
    			strcat(aux,"\\");
    			strcat(cd,aux);
    		 }
    		rc=*org;
    		while(rc->suiv!=NULL) rc=rc->suiv;
    		rc->suiv=parc;
     
    		}
     
    	 else
    		{
    		    printf( "Allocation impossible! Mémoire insuffisante... \n");
    		}
    }
    /*fin de la fonction ajout -----------------------------------------*/
    /*fonction qui affiche la liste chain‚e*/
    /* debut de la fonction*/
    void affichage(struct liste *org)
    {  	struct liste *parc;
    	parc=org;
    	while(parc)
    	{
    		printf("\n le nom : %s",parc->name);
    		parc=parc->suiv;
    	}
    	getch();
    }
    /*fin de la fonction---------------------------------*/
     
    int main()
    { struct liste *kl;
      int nb,j;
      kl=NULL;
      printf("donner nb");
      scanf("%d",&nb);
      for(j=0;j<nb;j++)
       ajout(&kl);
       affichage(kl);
       getch();
    return 0;
       }
    le compilateur bloc a chaque fois au cours de l'exécution je travaille avec broland turbo c version 3

  2. #2
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par seifdev
    le compilateur bloc a chaque fois au cours de l'exécution je travaille avec broland turbo c version 3
    Bonjour,
    Est-ce le compilateur qui remonte une erreur (et dans ce cas, laquelle ?), ou le programme compilé bloque-t-il à l'exécution ? (et dans ce cas, as-tu une idée de l'endroit ?)

    EDIT: En tout cas, dans ta fonction ajout, les char* aux et cb sont utilisés dans scanf et strcat, alors que tu ne les as pas initialisés...
    C'est le compilateur qui le dit :
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    -------------- Build: Debug in forums ---------------
    Compiling: main.c
    C:\...\forums\main.c:73: warning: function declaration isn't a prototype
    C:\...\forums\main.c:73: warning: return type of 'main' is not `int'
    C:\...\forums\main.c: In function `ajout':
    C:\...\forums\main.c:22: warning: 'aux' might be used uninitialized in this function
    C:\...\forums\main.c:23: warning: 'cd' might be used uninitialized in this function
    Linking console executable: .\forums.exe
    Process terminated with status 0 (0 minutes, 6 seconds)
    0 errors, 4 warnings

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par seifdev
    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
     
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<stdlib.h>
    struct liste
    { char name[10];
      char prenom[10];
      char bdate[10];
      char code[5];
      char sexe;
      int nbe;
      char enfcode[30];
      struct liste *suiv;
    };
    /* fonction qui ajoute une personne a la liste chain‚e */
    /*d‚but de la fonction */
    void ajout(struct liste **org)
    {
    	struct liste *parc;
    	struct liste *rc;
            int i,cc;
    	char* aux;
    	char* cd;
     
     
     
     
     
    	parc=(struct liste*)malloc(sizeof(struct liste));
    	parc->suiv=NULL;
    	puts("donnez le nom de la nouvelle personne");
    	scanf("%s",parc->name);
    	puts("donnez le prenom de la nouvelle personne");
    	scanf("%s",parc->prenom);
    	puts("donnez la date de naissance de la nouvelle personne");
    	scanf("%s",parc->bdate) ;
    	puts("donnez le code de la nouvelle personne");
    	scanf("%s",parc->code);
    	puts("donnez le sexe de la nouvelle personne");
    	parc->sexe=getch();
    	puts("donnez le nombre d'enfants de la nouvelle personne");
    	scanf("%d",&cc);
    	parc->nbe=cc;
    	for(i=0;i<cc;i++)
    	{
    		printf("\ndonner le code de ces enfants");
    		scanf("%s",aux);
    		strcat(aux,"\\");
    		strcat(cd,aux);
    	 }
            rc=*org;
            while(rc) rc=rc->suiv;
            rc=parc; 
     
     
    }
    /*fin de la fonction ajout -----------------------------------------*/
    /*fonction qui affiche la liste chain‚e*/
    /* debut de la fonction*/
    void affichage(struct liste *org)
    {  	struct liste *parc;parc=(struct liste*)malloc(sizeof(struct liste));
    	parc=org;
    	while(parc)
    	{
    		printf("\n le nom : %s",parc->name);
    		parc=parc->suiv;
    	}
    	getch();
    }
    /*fin de la fonction---------------------------------*/
     
    void main()
    { struct liste *kl;
      int nb,j;
      kl=NULL;
      printf("donner nb");
      scanf("%d",&nb);
      for(j=0;j<nb;j++)
       ajout(&kl);
       affichage(kl);
       }
    le compilateur bloc a chaque fois au cours de l'exécution je travaille avec broland turbo c version 3
    Voici rapidement quelques problèmes que je vois:

    1) Tu ne vérifie pas la valeur de retour de malloc dans la fonction ajout. Par ailleurs le cast de la valeur de retour de malloc est inutile, voir même déconseillé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    parc = malloc(sizeof *parc)
    if (parc != NULL)
    {
        /* Initialiser les champs de parc */
    }
    else
    {
        fprintf(stderr, "Allocation impossible! Mémoire insuffisante... \n");
    }
    2) Encore dans la fonction ajout(), l'utilisation de scanf("%s", tampon) n'est pas une façon sécurisée de saisir des chaînes de caractères, d'autant que les champs nom, prenom, etc de ta structure ont un longueur de 10 caractères, dont est utilisé par le caractère nul de fin de chaîne. Autrement dit, si je m'appelle "Jean-François" ou "Anne-Christelle", tu as un débordement de tampon.

    Personnellement je n'utilise pas scanf(). Jamais. Mais n'hésite pas à faire une recherche sur le forum pour apprendre à utiliser cette fonction correctement (très complexe). Voici un tutoriel à lire absolument si tu tiens à continuer avec scanf(): http://xrenault.developpez.com/tutoriels/c/scanf/. Sinon, je te conseille de penser à une solution à base de fgets()...

    3) zooro l'a déjà signalé, mais 2 pointeurs sont utilisés sans être initialisés dans ta fonction ajout(). AIE!

    4) Toujous dans cette fonction ajout(), il semble que tu désire ajouter le nouvel élément en queue de la liste via le code suivant:
    Citation Envoyé par seifdev
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rc=*org;
    while(rc) rc=rc->suiv;
    rc=parc;
    où rc est de type pointeur sur liste. Si donc le but est de placer l'élément pointé par parc en fin de liste, ce code est faux. En effet, à la fin de ta boucle, rc sur NULL et non sur le dernier élément de ta liste. La bonne façon de faire est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rc = *org;
    while (rc->suiv != NULL)
    {
        rc = rc->suiv;
    }
    rc->suiv = parc;
    5) Dans la fonction afficher(), outre le fait que tu ne vérifie pas la valeur de retour de malloc(), je ne comprends absolument pas la raison pour laquelle tu as besoin d'une allocation dynamique dans un fonction d'affichage.

    De plus, je ne vois pas à quoi te sert la fonction getch() ici. Je conseille d'éviter d'utiliser des fonctions non-standard inutilement. De même, l'inclusion ne te sert à rien d'autre qu'à déclarer getch(). Selon moi, à éliminer, à moins que tu ais un but précis.

    6) Enfin, nous arrivons à la fonction main(). Ton livre de C, quel qu'il soit, a certainement du te dire que la fonction main() retourne un entier de type int. TOUJOURS, et c'est important! De même par convention, main() renvoie la valeur 0 ou EXIT_SUCCESS (inclure stdlib.h) en cas d'exécution correcte, et EXIT_FAILURE dans le cas contraire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main(void)
    {
        /* ton code */
        return 0;
    }
    Sinon, encore au sujet de scanf(), je te conseille de vérifier sa valeur de retour. En effet, si l'utilisateur maladroit ou mal intentionné introduit autre chose qu'un entier, nb ne sera pas initialisé, et utilisé tel quel dans la boucle (BUG!).

    Pour finir, je ne comprends pas pourquoi tu affiche ta liste entière à chaque tour de boucle...

    Voilà, j'espère que ça t'aidera un peu...

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Membre averti
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Par défaut toujours ça marche pas
    la ça bloque dans la boucle ou le pointeur va a la fin de la liste
    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
    89
    90
    91
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<stdlib.h>
    struct liste
    { char name[10];
      char prenom[10];
      char bdate[10];
      char code[5];
      char sexe;
      int nbe;
      char enfcode[30];
      struct liste *suiv;
    };
    /* fonction qui ajoute une personne a la liste chain‚e */
    /*d‚but de la fonction */
    void ajout(struct liste **org)
    {
    	struct liste *parc;
    	struct liste *rc;
    	int i,cc;
    	char* aux="o";
    	char* cd="o";
     
     
     
     
     
    	parc=(struct liste*)malloc(sizeof(struct liste));
            if(parc != NULL)
            {    
            	parc->suiv=NULL;
    	  	puts("donnez le nom de la nouvelle personne");
    		scanf("%s",parc->name);
    		puts("donnez le prenom de la nouvelle personne");
    		scanf("%s",parc->prenom);
    		puts("donnez la date de naissance de la nouvelle personne");
    		scanf("%s",parc->bdate) ;
    		puts("donnez le code de la nouvelle personne");
    		scanf("%s",parc->code);
    		puts("donnez le sexe de la nouvelle personne");
    		parc->sexe=getch();
    		puts("donnez le nombre d'enfants de la nouvelle personne");
    		scanf("%d",&cc);
    		parc->nbe=cc;
    		for(i=0;i<cc;i++)
    		{
    			printf("\ndonner le code de ces enfants");
    			scanf("%s",aux);
    			strcat(aux,"\\");
    			strcat(cd,aux);
    		 }
                             if(org==NULL) *org=parc;
                             else 
                             {
    		 rc=*org; /*ça bloque ici*/
    		 while(rc->suiv!=NULL) rc=rc->suiv;
    		 rc->suiv=parc;
                             }
                    }
    	 }
             else
    		{
    		    printf( "Allocation impossible! Mémoire insuffisante... \n");
    		} 
    }
    /*fin de la fonction ajout -----------------------------------------*/
    /*fonction qui affiche la liste chain‚e*/
    /* debut de la fonction*/
    void affichage(struct liste *org)
    {  	struct liste *parc;
    	parc=org;
    	while(parc)
    	{
    		printf("\n le nom : %s",parc->name);
    		parc=parc->suiv;
    	}
    	getch();
    }
    /*fin de la fonction---------------------------------*/
     
    void main()
    { struct liste *kl;
      int nb,j;
      kl=NULL;
      printf("donner nb");
      scanf("%d",&nb);
      for(j=0;j<nb;j++)
       ajout(&kl);
       affichage(kl);
       }
    pour le scanf() je suis obliger de l'utiliser merci de votre aide

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par seifdev
    la ça bloque dans la boucle ou le pointeur va a la fin de la liste
    Ton code ne compile pas.
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `ajout':
    main.c:22: warning: initialization discards qualifiers from pointer target type
    main.c:23: warning: initialization discards qualifiers from pointer target type
    main.c: At top level:
    main.c:59: error: syntax error before "else"
    main.c:80: warning: function declaration isn't a prototype
    main.c:80: warning: return type of 'main' is not `int'
    Process terminated with status 1 (0 minutes, 2 seconds)
    1 errors, 4 warnings
    On ne t'a rien dit à propos de main() qui doit retourner int ? Et des entrées non sécurisées...
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
     
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
     
    struct liste
    {
       char name[10];
       char prenom[10];
       char bdate[10];
       char code[5];
       char sexe;
       int nbe;
       char enfcode[30];
       struct liste *suiv;
    };
     
    static void purge (void)
    {
       int c;
       while ((c = fgetc (stdin)) != '\n' && c != EOF)
       {
       }
     
    }
     
    static void get_s (char *s, size_t size)
    {
       fgets (s, size, stdin);
       {
          char *p = strchr (s, '\n');
          if (p != NULL)
          {
             *p = 0;
          }
          else
          {
             purge ();
          }
       }
    }
     
    static int get_c (void)
    {
       int c = getchar ();
       purge ();
       return c;
    }
     
    int get_i (int *p_err)
    {
       char s[32];
       int err = 0;
       long val;
       char *pend;
       get_s (s, sizeof s);
       val = strtol (s, &pend, 10);
       if (*pend != 0)
       {
          err = 1;
       }
     
       if (p_err != NULL)
       {
          *p_err = err;
       }
       return (int) val;
    }
     
    /* fonction qui ajoute une personne a la liste chain‚e */
    /*d‚but de la fonction */
    int ajout (struct liste **org)
    {
       int end = 0;
       struct liste *parc;
       int i, cc;
       char aux[30] = "o";
       char cd[30] = "o";
     
       parc = (struct liste *) malloc (sizeof (struct liste));
       if (parc != NULL)
       {
          parc->suiv = NULL;
          puts
             ("donnez le nom de la nouvelle personne (ou <ENTER> pour quitter)");
     
          get_s (parc->name, sizeof parc->name);
          end = *parc->name == 0;
          if (end)
          {
             free (parc);
          }
          else
          {
             puts ("donnez le prenom de la nouvelle personne");
             get_s (parc->prenom, sizeof parc->prenom);
             puts ("donnez la date de naissance de la nouvelle personne");
             get_s (parc->bdate, sizeof parc->bdate);
             puts ("donnez le code de la nouvelle personne");
             get_s (parc->code, sizeof parc->code);
             puts ("donnez le sexe de la nouvelle personne");
             parc->sexe = get_c ();
             int err;
             do
             {
                puts ("donnez le nombre d'enfants de la nouvelle personne");
                cc = get_i (&err);
                if (err)
                {
                   puts ("erreur de saisie");
                }
             }
             while (err);
             parc->nbe = cc;
             for (i = 0; i < cc; i++)
             {
                printf ("donner le code de l'enfant %d\n", i + 1);
                get_s (aux, sizeof aux - 1);
                strcat (aux, "\\");
                strncat (cd, aux, sizeof cd - strlen (cd) - 1);
             }
             *parc->enfcode = 0;
             strcpy (parc->enfcode, cd, sizeof parc->enfcode - 1);
             if (*org == NULL)
             {
                *org = parc;
             }
             else
             {
                struct liste *rc = *org;
                while (rc->suiv != NULL)
                   rc = rc->suiv;
                rc->suiv = parc;
             }
          }
       }
       else
       {
          fprintf (stderr, "Allocation impossible! Mémoire insuffisante... \n");
       }
       return end;
    }
     
    /*fin de la fonction ajout -----------------------------------------*/
    /*fonction qui affiche la liste chain‚e*/
    /* debut de la fonction*/
    void affichage (struct liste const *org)
    {
       struct liste const *parc = org;
       while (parc != NULL)
       {
          printf ("le nom : '%s'\n", parc->name);
          parc = parc->suiv;
       }
    }
     
    /*fin de la fonction---------------------------------*/
     
    int main (void)
    {
       struct liste *kl = NULL;
       int end;
       do
       {
          end = ajout (&kl);
       }
       while (!end);
       affichage (kl);
     
       return 0;
    }

  6. #6
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par seifdev
    la ça bloque dans la boucle ou le pointeur va a la fin de la liste
    Pas étonnant. Il y a une erreur ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char* aux="o";
    ...
    scanf("%s",aux);
    Vous n'allouez pas d'espace...

  7. #7
    Membre averti
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Par défaut toujours rien
    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
    89
    90
    91
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<stdlib.h>
    struct liste
    { char name[10];
      char prenom[10];
      char bdate[10];
      char code[5];
      char sexe;
      int nbe;
      char enfcode[30];
      struct liste *suiv;
    };
    /* fonction qui ajoute une personne a la liste chain‚e */
    /*d‚but de la fonction */
    void ajout(struct liste **org)
    {
    	struct liste *parc;
    	struct liste *rc;
    	int i,cc;
    	char aux[10];
    	char cd[10];
     
     
     
     
     
     
    	parc=(struct liste*)malloc(sizeof(struct liste));
            if(parc != NULL)
    	{
    		parc->suiv=NULL;
    		puts("donnez le nom de la nouvelle personne");
    		scanf("%s",parc->name);
    		puts("donnez le prenom de la nouvelle personne");
    		scanf("%s",parc->prenom);
    		puts("donnez la date de naissance de la nouvelle personne");
    		scanf("%s",parc->bdate) ;
    		puts("donnez le code de la nouvelle personne");
    		scanf("%s",parc->code);
    		puts("donnez le sexe de la nouvelle personne");
    		parc->sexe=getch();
    		puts("donnez le nombre d'enfants de la nouvelle personne");
    		scanf("%d",&cc);
    		parc->nbe=cc;
    		for(i=0;i<cc;i++)
    		{
    			printf("\ndonner le code de ces enfants");
    			scanf("%s",aux);
    			strcat(aux,"\\");
    			strcat(cd,aux);
    		 }
    		rc=*org;
    		while(rc->suiv!=NULL) rc=rc->suiv;
    		rc->suiv=parc;
     
    		}
     
    	 else
    		{
    		    printf( "Allocation impossible! Mémoire insuffisante... \n");
    		}
    }
    /*fin de la fonction ajout -----------------------------------------*/
    /*fonction qui affiche la liste chain‚e*/
    /* debut de la fonction*/
    void affichage(struct liste *org)
    {  	struct liste *parc;
    	parc=org;
    	while(parc)
    	{
    		printf("\n le nom : %s",parc->name);
    		parc=parc->suiv;
    	}
    	getch();
    }
    /*fin de la fonction---------------------------------*/
     
    int main()
    { struct liste *kl;
      int nb,j;
      kl=NULL;
      printf("donner nb");
      scanf("%d",&nb);
      for(j=0;j<nb;j++)
       ajout(&kl);
       affichage(kl);
       getch();
    return 0;
       }
    méme probléme ça bloque dans ajout quand le pointeur essaye d'arriver a la fin de la boucle

  8. #8
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    cd contient n'importe quoi car il n'a pas été initialisé. Il faut au moins faire
    avant d'entrer dans la boucle.

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

Discussions similaires

  1. Problème liste chainée simple
    Par Tziboun dans le forum C
    Réponses: 24
    Dernier message: 25/10/2012, 14h43
  2. [Liste Chainée Simple]_Sentinelle_
    Par orfix dans le forum C
    Réponses: 28
    Dernier message: 04/03/2008, 22h21
  3. Probléme avec Liste Chainée
    Par Lucas42 dans le forum C
    Réponses: 6
    Dernier message: 24/01/2008, 20h15
  4. Liste chainée simple
    Par BatuBou dans le forum C
    Réponses: 6
    Dernier message: 21/01/2008, 11h35
  5. liste chaine simple
    Par el baz dans le forum C
    Réponses: 8
    Dernier message: 03/08/2007, 20h54

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