Pb triage de chaine dans un tableau en C

Fermé
im4d - 31 mai 2008 à 14:32
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 - 1 juin 2008 à 16:38
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]);



}
A voir également:

2 réponses

Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
31 mai 2008 à 14:58
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
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
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46 > im4d
31 mai 2008 à 15:15
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
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46 > im4d
31 mai 2008 à 15:29
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
im4d > Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009
1 juin 2008 à 00:54
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
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46 > im4d
1 juin 2008 à 00:58
for(i=0;i<c;i++);
{ 
j'crois que le ; etait aussi de trop ^^
0
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
1 juin 2008 à 15:34
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
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
1 juin 2008 à 16:28
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
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44 > Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009
1 juin 2008 à 16:38
yep!!!
0