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.