Je test présentement le tri d'une liste chainé avec strcmp et j'aimerais que l'on m'explique la s'il ma façon d'assigner les valeurs est correct .
Je crois qu'il me manque une variable pour récupérer une valeur
void trierListeDescription (Produit* tabProduit)
{
// Variable de noeud temporaire pour récupérer les noeuds produit comparés
Produit* MesPoduitsTemp = new Produit;
// Liste de produits pour accéder aux nombres de noeuds contenus dans ma liste
ListeProduit MaListeProduits ;
int i;
while(tabProduit != NULL)
{
for(i=0; i < MaListeProduits.taille -1 ;i++)
{
// Assignation d'un noeud produit à la variable temporaire
MesPoduitsTemp = tabProduit;
Comme avec ton code on ne sait pas ce que c'est que Produit, ListeProduit, et ton message est classé dans C, alors que tu utilises "new" et que tu sembles appeler dans ta boucle des méthodes dans des objets, je crois que globalement, on est un peu perplexes :-)
Effectivement on pourrait dire que ma demande n'était pas très explicite alors voici un peu plus de détail :
Produit est une structure comportant les enregistrement suivants:
struct Produit
{
int noProduit;
std::string description;
double prixUnitaire;
int quantite;
Produit* produitSuiv;
}
ListeProduit est le controleur de mes noeuds qui conserve l'adresse dul debut et la fin de mes noeuds ainsi que le nombre de noeus dans taille
struct ListeProduit
{
Produit* tete;
Produit* queue;
int taille;
}
Donc en résumé je dois trié le noeud produit par ordre alphabétique du champ description(celui-ci ne comporte aucun accent)
- ce n'est pas du C
- cela ne compile pas en C
- tes structures ne sont pas des types, sans les aliaser avec typedef
- char description[255]; (par exemple) je connais, mais pas std::string description;
- new n'existe pas en C, il faut faire malloc, mais dans ton cas, si tu utilises des pointeurs sur des structures, tu n'as pas besoin d'allouer l'espace correspondant, mais seulement disposer d'un pointeur, donc Produit* MesPoduitsTemp; suffit
- en faisant ListeProduit MaListeProduits; tu déclares une variable, mais tu ne l'initialises pas
- donc MaListeProduits.taille contient une valeur imprédictible, utiliser cette valeur pour une boucle for, c'est un moyen d'explorer une autre dimension :-)
- MesPoduitsTemp = tabProduit puisque ce sont des pointeurs, tu fais pointer MesPoduitsTemp vers exactement la même chose que tabProduit
- donc dans strcmp(MesPoduitsTemp->description, tabProduit->description) tu compares exactement la même chose
- le contenu du if n'est jamais exécuté, puisque le résultat vaut toujours 0 comme tu compares toujours des données identiques
- de toutes façons le contenu du if ne fait rien, puisque MesPoduitsTemp = tabProduit; tabProduit = tabProduit->produitSuiv; tabProduit = MesPoduitsTemp; ne fait que remettre tabProduit dans le même état
Produit est une structure comportant les enregistrement suivants:
struct Produit
{
int noProduit;
std::string description;
double prixUnitaire;
int quantite;
Produit* produitSuiv;
}
ListeProduit est le controleur de mes noeuds qui conserve l'adresse dul debut et la fin de mes noeuds ainsi que le nombre de noeus dans taille
struct ListeProduit
{
Produit* tete;
Produit* queue;
int taille;
}
Donc en résumé je dois trié le noeud produit par ordre alphabétique du champ description(celui-ci ne comporte aucun accent)
Est-ce plus clair comme cela ?
D'Avance merci !
- ce n'est pas du C
- cela ne compile pas en C
- tes structures ne sont pas des types, sans les aliaser avec typedef
- char description[255]; (par exemple) je connais, mais pas std::string description;
- new n'existe pas en C, il faut faire malloc, mais dans ton cas, si tu utilises des pointeurs sur des structures, tu n'as pas besoin d'allouer l'espace correspondant, mais seulement disposer d'un pointeur, donc Produit* MesPoduitsTemp; suffit
- en faisant ListeProduit MaListeProduits; tu déclares une variable, mais tu ne l'initialises pas
- donc MaListeProduits.taille contient une valeur imprédictible, utiliser cette valeur pour une boucle for, c'est un moyen d'explorer une autre dimension :-)
- MesPoduitsTemp = tabProduit puisque ce sont des pointeurs, tu fais pointer MesPoduitsTemp vers exactement la même chose que tabProduit
- donc dans strcmp(MesPoduitsTemp->description, tabProduit->description) tu compares exactement la même chose
- le contenu du if n'est jamais exécuté, puisque le résultat vaut toujours 0 comme tu compares toujours des données identiques
- de toutes façons le contenu du if ne fait rien, puisque MesPoduitsTemp = tabProduit; tabProduit = tabProduit->produitSuiv; tabProduit = MesPoduitsTemp; ne fait que remettre tabProduit dans le même état
Dal