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 chainée et remplissage.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Bio-informaticienne
    Inscrit en
    Septembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Bio-informaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2009
    Messages : 97
    Par défaut Liste chainée et remplissage.
    Hello tous le monde je viens chercher quelques conseille car j ai un problème avec une liste chainée et j'ai beau essayer de reprendre mon code point par point je ne vois pas d'ou vient l'erreur.

    Pour commencer j'ai un fichier du type :

    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
    7000 3601
    345 10
    568 1
    803 1
    567 3
    0 0
    8000 2164
    850 1
    0 0
    7000 4987
    125 1
    345 1
    851 1
    0 0
    9000 5601
    567 3
    0 0
    alors les 2 premiers chiffres représentent respectivement le numero d'un vendeur et le numero d'un client les suivants represente le numero d'un produit et la quantite commande. Les lignes contenant 0 0 representent le debut d'un nouvelle commande.

    Bref je veux faire une liste chainée qui contiendrais le contenue de ce fichier
    pour cela je vais utiliser deux structures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct commande {
        int numProduit;
        int QuantiteCommandee;
        struct commande * nxt;
    };
     
    struct commandes {
        int numeroVendeur;
        int numeroClient;
        struct commande  * commande;
        struct commandes * nxt;
    };
    J'ai codé la fonction suivante qui devrais remplir la liste chainée.




    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
    void creerVendeursCommandes(vendeurs * &listVendeurs, commandes * &listCommandes) {
    	FILE * fcommandes;
    	fcommandes = fopen ("COMMANDE.DON","r");
        int numProduit, quantite; // Un compteur increnter a chaque nouvelle commande
        bool newCommande = 1; // Indique qu'on commence une nouvelle commande
     
        commandes * nouvelleCommandes = new commandes;
        // commande  * listCommande      = NULL;
        // commande  * nouvelleCommande  = new commande;
        //vendeur   * nouveauVe Attention pour vendeur et pour client necessiter de verifier si il sont deja 
        // present dans la liste chainee.
        while (!feof(fcommandes)) {
            if (newCommande == 1) {
                fscanf(fcommandes,"%d %d\n",&nouvelleCommandes->numeroVendeur,&nouvelleCommandes->numeroClient);
                newCommande = 0;
            }
            else {
                fscanf(fcommandes,"%d %d\n",&numProduit,&quantite);
                if (numProduit != 0 && quantite != 0) {
                    //nouvelleCommande->numProduit        = numProduit;
                    //nouvelleCommande->QuantiteCommandee = quantite;
                    //nouvelleCommande->nxt               = listCommande;
                }
                else {
                    //nouvelleCommandes->commande = listCommande;
                    nouvelleCommandes->nxt        = listCommandes;
                    listCommandes     = nouvelleCommandes;
                    afficherCommandes(listCommandes);
     
                    // Re-initialisation des listes
     
                    // printf("NumVendeur : %d\n", nouvelleCommandes->numeroVendeur);
     
                    commandes * nouvelleCommandes = new commandes;
                    commande  * nouvelleCommande  = new commande;
                    newCommande = 1;
                }
            }
        }
        fclose(fcommandes);
    }
    J'ai egalement creer une fonction censer afficher la liste chainée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void afficherCommandes (commandes * liste) {
        printf("##################################\n");
        // commandes * tmp_commandes = &liste;
        /* Tant que l'on n'est pas au bout de la liste */
     
        commandes *tmp = liste;
        // /* Tant que l'on n'est pas au bout de la liste */
        int i = 0;
        while(tmp != NULL){
            printf("Num client : %d\n", tmp->numeroClient);
            printf("Num vendeur : %d\n", tmp->numeroVendeur);
            tmp = tmp->nxt;
        }
    }
    Mon probleme et que je boucle indefiniment lorsque je fait l'affichage de la liste et je ne comprend pas pourquoi... cela semble bloqué sur le dernier element entré dans la liste c'est à dire le premier de la liste...

    Je ne comprend vraiment pas quelqu'un pour m'aider, svp.

  2. #2
    Membre confirmé
    Femme Profil pro
    Bio-informaticienne
    Inscrit en
    Septembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Bio-informaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2009
    Messages : 97
    Par défaut
    Oki bon bah j'ai trouvé d'ou venais mon probleme et voici le code corrigé

    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
    void creerVendeursCommandes(vendeurs * &listVendeurs, commandes * &listCommandes) {
    	FILE * fcommandes;
    	fcommandes = fopen ("COMMANDE.DON","r");
        int numProduit, quantite; // Un compteur increnter a chaque nouvelle commande
        bool newCommande = 1; // Indique qu'on commence une nouvelle commande
     
        commandes * nouvelleCommandes = new commandes;
        // commande  * listCommande      = NULL;
        // commande  * nouvelleCommande  = new commande;
        //vendeur   * nouveauVe Attention pour vendeur et pour client necessiter de verifier si il sont deja 
        // present dans la liste chainee.
        while (!feof(fcommandes)) {
            if (newCommande == 1) {
                fscanf(fcommandes,"%d %d\n",&nouvelleCommandes->numeroVendeur,&nouvelleCommandes->numeroClient);
                newCommande = 0;
            }
            else {
                fscanf(fcommandes,"%d %d\n",&numProduit,&quantite);
                if (numProduit != 0 && quantite != 0) {
                    //nouvelleCommande->numProduit        = numProduit;
                    //nouvelleCommande->QuantiteCommandee = quantite;
                    //nouvelleCommande->nxt               = listCommande;
                }
                else {
                    //nouvelleCommandes->commande = listCommande;
                    nouvelleCommandes->nxt        = listCommandes;
                    listCommandes     = nouvelleCommandes;
                    afficherCommandes(listCommandes);
     
                    // Re-initialisation des listes
     
                    // printf("NumVendeur : %d\n", nouvelleCommandes->numeroVendeur);
     
                    nouvelleCommandes = new commandes;
                    nouvelleCommande  = new commande;
                    newCommande = 1;
                }
            }
        }
        fclose(fcommandes);
    Merci a ceux qui on lu le post, mais finalement tout va bien

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

Discussions similaires

  1. Remplissage d'une liste chainée
    Par un passant dans le forum Débuter
    Réponses: 19
    Dernier message: 13/06/2008, 14h40
  2. Bibliothèque de listes chainées
    Par gege2061 dans le forum C
    Réponses: 29
    Dernier message: 17/12/2004, 20h15
  3. copie de liste chainée
    Par tomsoyer dans le forum C++
    Réponses: 15
    Dernier message: 31/08/2004, 18h20
  4. Trie liste chaine
    Par Congru dans le forum C
    Réponses: 2
    Dernier message: 30/03/2004, 19h05
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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