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 :
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.
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
Bref je veux faire une liste chainée qui contiendrais le contenue de ce fichier
pour cela je vais utiliser deux structures :
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 struct commande { int numProduit; int QuantiteCommandee; struct commande * nxt; }; struct commandes { int numeroVendeur; int numeroClient; struct commande * commande; struct commandes * nxt; };
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
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); }
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...
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; } }
Je ne comprend vraiment pas quelqu'un pour m'aider, svp.
Partager