Pb triage de chaine dans un tableau en C

im4d -  
daronmaster Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

voila j'ai un prob avec ma boucle de tri quand je lance le pgm les entrées,saisie etc marche correctement mais lors de l'affichage ,par exemple qd j entre 3nom,le premier nom qui est a l'indice 0 est vide et seulement ensuite il m'affiche les autres noms mais ils ne sont pas trier.C'est surement un pb de ma boucle de tri mais je trouve pas quoi aidez moi svp merci d'avance

/*saisir une liste de nom qu'il range dans un tableau de chaine 2dimension,si utilisateur
entre le mot fin on stop la saisie,puis afficher le contenue du tableau
trier les noms dans l'ordre alphabétique */

#include<stdio.h>

#include<string.h>
#define Nom_personne 100
#define Taille_nom 100

int main()
{
//-----------Sequence d'initialisation-----------
char Liste_personne[Nom_personne] [Taille_nom];
char nom[Taille_nom],tempnom[Taille_nom];
int i,j,k,terminer=0,c=0;
for(i=0,j=0;i<Nom_personne,j<Taille_nom;i++,j++)
Liste_personne[i]=="";
//------------------Corps du programme--------------
//---------Boucle de saisie de nom-----------
do
{
printf("Entrez un nom(fin pour terminer les saisies)\n");
scanf("%s",nom);
terminer=((strcmp(nom,"fin"))==0);/*compare le nom entré et le mot fin,si renvoi 0 alors le pgm est terminé*/
if(!terminer)//enregistre au fur et a mesure les nom dans le tableau Tant que client n entre pas fin
{
strcpy(Liste_personne[c],nom);
c++;
}
}while(!terminer);

//-------Boucle de tri du tableau------

for(i=0;i<c;i++);
{
k=i;
while( (k>0) && (strcmp(Liste_personne[k],Liste_personne[k-1])<0) )
{
strcpy(tempnom,Liste_personne[k-1]);
strcpy(Liste_personne[k-1],Liste_personne[k]);
strcpy(Liste_personne[k],tempnom);
k--;

}

}

//----------Boucle d'affichage du tableau-------------
for(i=0;i<c;i++)

printf("la personne numero %d est %s\n",i,Liste_personne[i]);

}
Configuration: Windows XP
Firefox 2.0.0.14

2 réponses

  1. Brachior Messages postés 616 Statut Membre 46
     
    tu veux mettre le tableau vide ?
    si tu marque Liste_personne[i]=="";
    alors tu fais une comparaison
    retire un = pour donner la valeur
    et ton j semble inutile Oo
    de plus il n'est pas utile de mettre a zero ton tableau car lorsque tu y rentre un string grace a %s,
    le programme fini la chaine par \0

    enfin bn c'est pas la le prob ^^

    euh t'as essayé d'afficher le tableau avant le tri pour voir ce qu'il t'affiche ?
    0
    1. im4d
       
      je veux que mon pgm affiche par ordre alphabetique les nom que l utilisateur saisie par ex:

      entrez nom:
      paul
      entrez nom:
      robert
      entrez nom:
      alane

      les noms sont stocké dans un tableau et ensuite il affiche les nom par ordre alphabétique comme ceci:
      alane
      paul
      robert


      qd j affiche sans la boucle de tri sa marche ,evidemment c pas trié,mais qd j'essaye d'afficher ac un tri sa ne fctionne pas
      0
    2. Brachior Messages postés 616 Statut Membre 46 > im4d
       
      je me souviens que j'ai eut un probleme avec la commande strcpy ...
      c'etait un probleme de taille de tableau
      j'ai du mettre mon tableau tmp 10fois plus gd que le tableau contenant la chaine

      je sais pas si c'est ca mais je sais que
      soit il m'affichait "erreur de segmentation"
      soit il plantait

      ( j'allume l'emulateur et j'essaye chez moi ^^ )
      0
    3. Brachior Messages postés 616 Statut Membre 46 > im4d
       
      euh Oo ..
      j'test chez moi et ca fct Oo
      ( bn par contre j'ai du modifier les p'tites erreurs ^^ )

      voila le code qui fct chez moi :

      #include<stdio.h>
      #include<string.h>
      #define Nom_personne 100
      #define Taille_nom 100
      
      main(){
      //-----------Sequence d'initialisation-----------
        char Liste_personne[Nom_personne] [Taille_nom];
        char nom[Taille_nom],tempnom[Taille_nom];
        int i,j,k,terminer=0,c=0;
        for(i=0,j=0;i<Nom_personne,j<Taille_nom;i++,j++)
          Liste_personne[i]=="";
      //------------------Corps du programme--------------
      //---------Boucle de saisie de nom-----------
        do{
          printf("Entrez un nom(fin pour terminer les saisies)\n");
          scanf("%s",nom);
          terminer=((strcmp(nom,"fin"))==0);
      //compare le nom entré et le mot fin,si renvoi 0 alors le pgm est terminé
          if(!terminer){
      //enregistre au fur et a mesure les nom dans le tableau Tant que client n entre pas fin
            strcpy(Liste_personne[c],nom);
            c++;}}
        while(!terminer);
      
      //-------Boucle de tri du tableau------
        for(i=0;i<c;i++){
          k=i;
          while( (k>0) && (strcmp(Liste_personne[k],Liste_personne[k-1])<0) ){
            strcpy(tempnom,Liste_personne[k-1]);
            strcpy(Liste_personne[k-1],Liste_personne[k]);
            strcpy(Liste_personne[k],tempnom);
            k--;}}
      
      //----------Boucle d'affichage du tableau-------------
        for(i=0;i<c;i++)
          printf("la personne numero %d est %s\n",i,Liste_personne[i]);}
      
      0
    4. im4d > Brachior Messages postés 616 Statut Membre
       
      merci de ton aide mais pourrais tu m expliqué cmt t a fais ? c juste parce que j ai oublié les accolades au niveau de la boucle?
      0
    5. Brachior Messages postés 616 Statut Membre 46 > im4d
       
      for(i=0;i<c;i++);
      { 
      j'crois que le ; etait aussi de trop ^^
      0
  2. daronmaster Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   44
     
    et au passage,
    for(i=0,j=0;i<Nom_personne,j<Taille_nom;i++,j++)
    Liste_personne[i]=="";

    ne sert à rien et n'a aucun sens ... un seul indice utilisé (i) et test d'égalité non interpréter et sans aucun sens

    salut

    tchû
    0
    1. Brachior Messages postés 616 Statut Membre 46
       
      je l'ai deja mentionné ds le 1er post ^^
      mais tu as raison de repreciser qu'il est inutile de surcharger un programme inutilement ^^
      0
      1. daronmaster Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   44 > Brachior Messages postés 616 Statut Membre
         
        yep!!!
        0