Tri alphabetique probleme

Résolu
Bonjour,
j'ai créé un programme en C mais j'ai un petit soucis avec le tri par ordre alphabétique, voici mon code:

// Definition de la structure
struct article
{
int reference;
char designation[50];
float prix;
int quantite;
};

void tri_tableau_designation (struct article solde[],int n)
{
int i;
struct article temp;
for (i=0; i<n; i++)
{if (strcmp(solde[i].designation,solde[i+1].designation)>0) //tri 2 elements (chaines) d'une structure
{temp=solde[i];
solde[i]=solde[i+1];
solde[i+1]=temp;
i=0;
printf("/n%d",i);
}
}
printf("Voici le stock du magasin avec les articles soldes et tries alphabetiquement:\n\n");
affiche_tableau_article(solde,n);
}


en fait je voudrais qu'il me tri par ordre laphabétiques des structures articles mais voila ce qu'il me fait:
reference: 001
designation: Article1
prix: 32.00
quantite: 200

reference: 00
designation:
prix: 00.00
quantite: 0

il me met automatiquement la 2eme a 0
comment corriger cela?
merci

PS: pas d'erreur de compilation (je suis debutant)...
Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Il faudrait un minimum chercher surtout que ces fonctions sont très bien documentées :
    http://www.cplusplus.com/reference/cstdlib/qsort/

    Definir d'abord la fonction de comparaison :
    
    int compareAlphaArticles(const void * article1, const void * article2) {
       return strcmp(((struct Article*)article1)->designation , ((struct Article*)article2)->designation);
    }
    


    puis pour trier tu mets cette ligne dans ton code :
    qsort(tableauDArticles, longueurTableau, sizeof(struct Article), compareAlphaArticles);
    


    Voilà !
    1. Modérateur
      Je te propose soit d'utiliser la fonction qsort si tu reste en C, soit d'utiliser un std::set si tu fais du C++.
      http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/qsort.3.html
      http://www.lri.fr/~aze/page_c/aide_c/show_xml.php?file=qsort.xml

      Bonne chance
      1. Bonjour,
        je souhaiterais utiliser qsort mais je ne comprend pas bien la syntaxe...
        je voudrais comparer 2 chaines de caractère issue d'une structure:

        struct article
        {
        int reference;
        char designation[50];
        float prix;
        int quantite;
        };

        reference: 001
        designation: Article1
        prix: 32.00
        quantite: 200

        reference: 002
        designation: Article 2
        prix: 12.45
        quantite: 12

        comparer ici Article1 et Article2 et les placer par ordre alphabétique

        pouvez vous m'indiquer seulement de facon plus clair que la doc la syntaxe (ex: qsort (chaine1,chaine2,...))
        car j'ai tester cette ligne mais le programme plante (pas d'erreur de compilation):
        {if (qsort(2,(solde[i].designation,solde[i+1].designation))>0)

        PS: je ne connait pas la taille des chaine, seulement la longueure max: 50

        merci!