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 :

petit problème sur les listes chaînées


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut petit problème sur les listes chaînées
    voici mon programme :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
     
    typedef struct Voiture        //Définition de la structure Voiture
    {
            char *marque;
            char *modele;
            char *puissance;
            struct Voiture *suivant;
    }Voiture;
     
     
    void Creer (Voiture *);
     
     
    void main(void)                 
    {                      
          Voiture *tete=NULL;
    	  tete = malloc(sizeof *tete);
    	  Creer (&tete);	  
     //     ecrire (&tete);
     }
     
    void Creer (Voiture *p)        //Définition de la fonction Creer qui est de type Voiture
    {
    		Voiture *voit=NULL;
    		voit = malloc(sizeof *voit);
            printf("Entrez la marque :\n");
    		scanf("%s",voit->marque);
            printf("Entrez le modele :\n");
    		scanf("%s",voit->modele);
            printf("Entrez la puissance :\n");
    		scanf("%s",voit->puissance);
    		voit->suivant=p;
    		p=voit;
     
    }
    il se compile bien et se génère bien mais après avoir entrer le marque dans le programme, une erreur survient et me fais arrêter l'application!!!

    D'ou cela peux venir???
    Merci d'avance.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par poche
    voici mon programme :
    <rien>
    Tu n'as toujours pas compris comment on mettait les balises codes... Il suffit pourtant de lire les règles du forum où tout est expliqué...

    Et je rappelle que, contrairement à d'autres langages, le C est sensible à la casse : creer != Creer...
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Tu n'as toujours pas compris comment on mettait les balises codes... Il suffit pourtant de lire les règles du forum où tout est expliqué...

    Et je rappelle que, contrairement à d'autres langages, le C est sensible à la casse : creer != Creer...
    Merci je m'était trompé, à la place de [CODE] j'avais mis [QUOTE], désolé...

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    je crois que j'ai trouvé l'erreur:

    fallait mettre ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%s",&(voit->marque));
    à la place de ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%s",voit->marque);
    Est ce bon?Est ce la bonne syntaxe?

    Et sinon quand j'appel la fonction Creer() il faut que je mette en paramettre "&tete ou tete, c'est à dire:

    ou

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Salut, il faut que tu mettes

    car tete est est Voiture *

    1) après un malloc, teste si ton pointeur n'est pas nul
    2) le prototype de main n'est pas void main(void) mais int main(void) ou bien int main(int argc,char ** argv)
    3) rajoute un return EXIT_SUCCESS à la fin du main
    4) il faut que tu fasses un free(tete), tete=NULL;

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par salseropom
    Salut, il faut que tu mettes

    car tete est est Voiture *

    1) après un malloc, teste si ton pointeur n'est pas nul
    2) le prototype de main n'est pas void main(void) mais int main(void) ou bien int main(int argc,char ** argv)
    3) rajoute un return EXIT_SUCCESS à la fin du main
    4) il faut que tu fasses un free(tete), tete=NULL;

    Je ne comprends pas ton petit 4), pourtant je fais bien :

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    Sinon quand je fais ça, ça se compile, mais sa mais une erreur lors de l'application rendu au printf !!!!:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main(void)                 
    {                      
          Voiture *tete=NULL;
    	  tete = malloc(sizeof *tete);
    	  Creer (tete);	
    	  printf("%s",tete->marque);
     //     ecrire (&tete);
    	  return EXIT_SUCCESS; 
     }

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par poche
    Sinon quand je fais ça, ça se compile, mais sa mais une erreur lors de l'application rendu au printf !!!!:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main(void)                 
    {                      
          Voiture *tete=NULL;
    	  tete = malloc(sizeof *tete);
    	  Creer (tete);	
    	  printf("%s",tete->marque);
     //     ecrire (&tete);
    	  return EXIT_SUCCESS; 
     }
    je corrige

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main(void)                 
    {                      
          Voiture *tete = malloc(sizeof *tete);
         if(tete==NULL)
        {
         fprintf(stderr,"Erreur malloc\n");
         exit(EXIT_FAILURE);
        }
    	  Creer (tete);	
    	  printf("%s\n",tete->marque);
           free(tete); tete=NULL; /* il faut liberer la memoire. C'est tres imporant */
    	  return EXIT_SUCCESS; 
     }

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    J'ai fais ça, est ce que ça marche?ai je bien utilisé la bonne syntaxe?

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
     
     
    typedef struct Voiture        //Définition de la structure Voiture
    {
            char *marque;
            char *modele;
            char *puissance;
            struct Voiture *suivant;
    }Voiture;
     
     
    void Creer (Voiture **p);
     
     
    int main(void)                 
    {                      
          Voiture *tete=NULL;
    	  tete = malloc(sizeof *tete);
    	  if (tete=NULL) exit(EXIT_FAILURE);
    	  Creer (&tete);
    	  printf("%s\n",&(tete->marque));
           free(tete); tete=NULL; /* il faut liberer la memoire. C'est tres imporant */
    	  return EXIT_SUCCESS; 
     
     
     
     
     //     ecrire (&tete);
    	 // return EXIT_SUCCESS; 
     }
     
    void Creer (Voiture **p)        //Définition de la fonction Creer qui est de type Voiture
    {
    		Voiture *voit=NULL;
    		voit = malloc(sizeof *voit);
    		if (voit==NULL) exit(-1);
            printf("Entrez la marque :\n");
    		scanf("%s",&(voit->marque));
            printf("Entrez le modele :\n");
    		scanf("%s",&(voit->modele));
            printf("Entrez la puissance :\n");
    		scanf("%s",&(voit->puissance));
    		voit->suivant= *p;
    		*p=voit;
     
    }

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    comme dans ton autre mesage, tu dois allouer de l'espace pour tes chaines. Dans la fonction Creer, il faut que tu fasses qqch du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    p->marque=malloc(20*sizeof(*p->marque));
    /* tester is p->marque == NULL */
     
    p->modele=malloc(20*sizeof(*p->modele));
    /* tester si p->modele == NULL */
    et après ca devrait marcher... et n'oublie pas de libérer la mémoire à la fin de ton prgm

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par poche
    J'ai fais ça, est ce que ça marche?ai je bien utilisé la bonne syntaxe?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
     
     
    typedef struct Voiture        //Définition de la structure Voiture
    {
            char *marque;
            char *modele;
            char *puissance;
            struct Voiture *suivant;
    }Voiture;
    je ne suis pas sûr que cette syntaxe soit acceptée...
    typedef struct Voiture {blabla} Voiture; ??

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par poche
    J'ai fais ça, est ce que ça marche?ai je bien utilisé la bonne syntaxe?

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
     
     
    typedef struct Voiture        //Définition de la structure Voiture
    {
            char *marque;
            char *modele;
            char *puissance;
            struct Voiture *suivant;
    }Voiture;
     
     
    void Creer (Voiture **p);
     
     
    int main(void)                 
    {                      
          Voiture *tete=NULL;
    	  tete = malloc(sizeof *tete);
    	  if (tete=NULL) exit(EXIT_FAILURE);
    	  Creer (&tete);
    	  printf("%s\n",&(tete->marque));
           free(tete); tete=NULL; /* il faut liberer la memoire. C'est tres imporant */
    	  return EXIT_SUCCESS; 
     
     
    }

    non, ce serait plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%s\n",tete->marque);

  13. #13
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    pourquoi sa marche toujours pas quand j'écris ça :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
     
     
    typedef struct Voiture        //Définition de la structure Voiture
    {
            char marque[20];
            char modele[20];
            char puissance[3];
            struct Voiture *suivant;
    }Voiture;
     
     
    void Creer (Voiture *p);
     
     
    int main(void)                 
    {                      
          Voiture *tete=NULL;
    	  tete = malloc(sizeof *tete);
    	  if (tete=NULL) exit(EXIT_FAILURE);
    	  Creer (tete);
    	  printf("%s\n",tete->marque);
          free(tete); tete=NULL; /* il faut liberer la memoire. C'est tres imporant */
    	  return EXIT_SUCCESS; 
     
     
     }
     
    void Creer (Voiture *p)        //Définition de la fonction Creer qui est de type Voiture
    {
    		Voiture *voit=NULL;
            printf("Entrez la marque :\n");
    		scanf("%s",&(voit->marque);
            printf("Entrez le modele :\n");
    		scanf("%s",&(voit->modele));
            printf("Entrez la puissance :\n");
    		scanf("%s",&(voit->puissance));
    		voit->suivant=p;
    		p=voit;
     
    }

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Creer (Voiture *p)        //Définition de la fonction Creer qui est de type Voiture
    {
    <snip>
    	p=voit;
    }
    Ne sert à rien car p est une copie locale du pointeur...

    Comme on l'a déjà dit, si tu veux modifier le pointeur lui-même dans Creer(), tu dois passer un pointeur de pointeur...
    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.

  15. #15
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    ok merci

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

Discussions similaires

  1. Précision sur les listes chaînées
    Par Von22 dans le forum C
    Réponses: 7
    Dernier message: 25/11/2007, 22h24
  2. Petits problèmes avec les listes
    Par cepekinio dans le forum Prolog
    Réponses: 4
    Dernier message: 30/10/2007, 13h23
  3. Problème avec les listes chaînées
    Par yous18 dans le forum C
    Réponses: 38
    Dernier message: 25/10/2007, 22h30
  4. Problème sur les listes doublement chainée
    Par Traouspont dans le forum C
    Réponses: 5
    Dernier message: 05/01/2007, 12h02
  5. [TP 7] Problème avec les listes chaînées (error 202)
    Par thelinekioubeur dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 06/12/2006, 23h15

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