Pb triage de chaine dans un tableau en C
im4d
-
daronmaster Messages postés 326 Date d'inscription Statut Membre Dernière intervention -
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]);
}
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:
- Pb triage de chaine dans un tableau en C
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
2 réponses
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 ?
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 ?
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
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 ^^ )
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 :