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 :

données erroné dans liste chainée


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Par défaut données erroné dans liste chainée
    Bonjour,
    voilà je dois faire une liste chainée d'achat qui liste les achats d'un client et les produits achetés. j'ai trois structure : une produit, une client et une element(achat) c'est le node.
    bon voilà quand je crée un client que je veux entrer dans mon tableau ce que j'ai initialisé est erroné. cela vient surement de mes pointeurs. j'aimerais un petit coup de main pour m'aider à pouvoir des clients dans mon tableau de client. premierement
    voila mon code merci
    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
     
    typedef struct element {
    int dateAchat;
    int quantite;
    struct element *ptrElementVert;
    struct element *ptrElementHori;
     
    }ELEMENT;
     
    typedef struct client {
    char* nomClient;
    char* prenomClient;
    struct element *ptrElementCli;
     
    }CLIENT;
    je passe les prototypes et qques fonctions
    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
     
     
    int main (int argc, char* argv[])
    {
     
      CLIENT tabClient[10];
      PRODUIT tabProduit[10];
    // compteur et indice tableau
    int cptClient=0;
    int cptProduit=0;
     
     
    CLIENT* tmp=NULL;
     
    do
    {
        select = menu();
        switch (select)
            {
            case 1:
                    //CLIENT cl;
                    tmp = malloc(sizeof(CLIENT));
                    addClient2(&cptClient, tmp);
                     printf("%s", tmp->nomClient);
                    tabClient[0]=*tmp;
                    printf("%s", tabClient[0].nomClient);
                    break;
     
            case 2: ; break;
            case 3: ; break;
            case 4: ; break;
            case 5: end = quit(); break;
            default: message("\n\nPlease make a selection between 1 and 5.\a");
            }
        }
        while (end);
     
     
      return(EXIT_SUCCESS);
     
    }
     
     
     
     
    void addClient2(int* cpt, CLIENT* client){
    cpt++;
    if(*cpt<10){
    char chaineNom [20];
    char chainePrenom[20];
     
      printf("Entrez votre Nom\n");
      scanf("%s", chaineNom);
      printf("Entrez votre prenom\n");
      scanf("%s", chainePrenom);
      client->nomClient=chaineNom;
      client->prenomClient=chainePrenom;
      printf("%s %s", client->nomClient, client->prenomClient);
    }
     
    }
    Le printf de la fonction affiche bien le nom et prenom, pourtant je passe son adresse et en retour j'ai pas ce qui doit etre affiché dans mon tableau

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Tu stockes les noms et les prénoms dans des variables locales qui seront supprimées lors de la sortie de la fonction.

    Les pointeurs contenus dans ta structure CLIENT pointeront alors sur un espace non-alloué.

    Il faut que tu utilises les fonctions malloc et free.

  3. #3
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Autre problème, dans addClient2, cpt++ incrémente le pointeur, et pas la valeur de l’int pointé*! Il faut écrire (*cpt)++ (parenthèses nécessaires, car l’opérateur ++ a une priorité supérieure à celle de l’opérateur de déréférencement…).

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

Discussions similaires

  1. Problème de max dans liste chainée
    Par chikita dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 19/11/2014, 19h16
  2. Réponses: 41
    Dernier message: 23/01/2014, 16h30
  3. Requete pour suppression de propagation dans liste chainée
    Par chris92 dans le forum Développement
    Réponses: 8
    Dernier message: 27/05/2009, 15h30
  4. Problème d'acces aux données d'une liste Chainée
    Par Le Payton dans le forum Langage
    Réponses: 4
    Dernier message: 27/08/2007, 11h00
  5. Donnée affichée dans liste modifiable
    Par puppusse79 dans le forum Access
    Réponses: 9
    Dernier message: 13/12/2006, 15h31

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