peli20
Messages postés3Date d'inscriptionsamedi 23 janvier 2010StatutMembreDernière intervention 5 juin 2011
-
23 janv. 2010 à 20:10
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011
-
24 janv. 2010 à 13:35
salut, j ai un petit probleme en c ,j espere que vous m aidiez..
bon, j essaie d elaborer un programme faisant la gestion des contact,
le remplissage est fait, l affichage aussi, mais lorsq je veux tirer le tableau des contact selon l ordre croissant des noms j ai des problemes,
en execution ce q j obtient, c est la permutation des nom et nom pas la permutation de toute la structure, voici mon code:(merci pour l aide )
//le tri par nom
void trier_nom(contact *e,int n )
{
char*p;
int i;
int j;
for (i=0; i<n ; i++)
{
for(j=i+1; j<n ; j++)
{
if(strcmp(e[i].nom,e[j].nom)>0)
{
p=e[i].nom;
e[i].nom=e[j].nom;
e[j].nom=p;
}
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 24 janv. 2010 à 13:35
Salut,
Déjà de gros problèmes de base dans ton code.
- (*variable).attribut est équivalent à variable->attribut, donc par exemple (*(e+i)).date_naissance devient (e+i)->date_naissance (c'est quand même plus lisible).
- dans saisir(), tu alloues mal la mémoire : la première fois tu alloues une zone de même taille que ta chaine saisie (en oubliant le +1 pour le \0 !), mais les autres fois, tu alloues une zone toujours de même taille que la première, parce-que tu oublies de recalculer la taille des chaines saisies (strlen()). Et sizeof(char) vaut toujours 1.
Donc pour commencer, ta structure est mauvaise dès le début de ton programme.
Ensuite, c'est évident que seul le nom est interverti, et non pas la structure, puisque dans ta fonction trier_nom(), tu n'intervertis que le nom de tes structures...
Pour ce genre de manipulation, je te conseillerais d'utiliser une liste chainée. C'est quand même beaucoup plus simple.