Accueil > Forum > > > > trier un tableau de stucture en c
trier un tableau de stucture en c
samedi 23 janvier 2010 à 20:10:08 |
trier un tableau de stucture en c

peli20
|
 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 )
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<conio.h>
typedef struct dat{
int jour;
int mois;
int annee;
}DATE;
typedef struct cont{
char *cin;
char *nom;
char*prenom;
char*adresse;
char *gsm;
char*tel;
char*fax;
DATE date_naissance;
char*mail1;
char*mail2;
}contact;
void saisir(contact*,int);
void afficher(contact*,int);
void trier_nom(contact *,int );
void trier_birth(contact *,int);
main()
{
contact*e;
int n,i,l;
printf("entrer nbre de contact \n");
scanf("%d",&n);
e=(contact*)malloc(n*sizeof(contact));
saisir(e,n);
trier_nom(e,n);
//trier_birth(e,n);
afficher(e,n);
getch();
}
void saisir(contact *e,int n)
{ char s[20];
int i,l;
for(i=0;i<n;i++)
{printf("cin no°:%d ",i);
scanf("%d",&((e+i)->cin)); //printf("\n");
printf("le nom:"); scanf("%s",s);
l=strlen(s);
(e+i)->nom=(char*)malloc(l*sizeof(char));
strcpy((e+i)->nom ,s);//printf("\n");
printf("le prenom:"); scanf("%s",s);
(e+i)->prenom=(char*)malloc(l*sizeof(char));
strcpy((e+i)->prenom ,s);
printf("l'adresse:");scanf("%s",s);
(e+i)->adresse=(char*)malloc(l*sizeof(char));
strcpy((e+i)->adresse ,s);
printf("le gsm:");scanf("%s",s);
(e+i)->gsm=(char*)malloc(l*sizeof(char));
strcpy((e+i)->gsm ,s);
printf("tel:");scanf("%s",s);
(e+i)->tel=(char*)malloc(l*sizeof(char));
strcpy((e+i)->tel ,s);
printf("le fax:");scanf("%s",s);
(e+i)->fax=(char*)malloc(l*sizeof(char));
strcpy((e+i)->fax ,s);
printf("mail1:");scanf("%s",s);
(e+i)->mail1=(char*)malloc(l*sizeof(char));
strcpy((e+i)->mail1 ,s);
printf("mail2:");scanf("%s",s);
(e+i)->mail2=(char*)malloc(l*sizeof(char));
strcpy((e+i)->mail2 ,s);
printf("le jour :\n"); scanf("%d",&e[i].date_naissance.jour);
printf("le mois :\n"); scanf("%d",&e[i].date_naissance.mois);
printf("le annee :\n"); scanf("%d",&e[i].date_naissance.annee);
}
}
void afficher(contact *e,int n)
{ int i;
for(i=0;i<n;i++)
{ printf(" %d \n",(*(e+i)).cin);
printf(" %s \n",(*(e+i)).nom);
printf(" %s \n ",(*(e+i)).prenom);
printf(" %d \n",(*(e+i)).adresse);
printf(" %s \n",(*(e+i)).gsm);
printf(" %s \n ",(*(e+i)).tel);
printf(" %d \n",(*(e+i)).fax);
printf(" %s \n",(*(e+i)).mail1);
printf(" %s \n",(*(e+i)).mail2);
printf(" %d%d%d \n ",(*(e+i)).date_naissance.jour,(*(e+i)).date_naissance.mois,(*(e+i)).date_naissance.annee);
printf(" \n\n");
}
}
//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;
}
}
}
}Code C# : [/code]
|
|
dimanche 24 janvier 2010 à 13:35:24 |
Re : trier un tableau de stucture en c

uaip
|
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.
Cordialement, uaip.
|
|
Cette discussion est classée dans : int, printf, scanf, char, contact
Répondre à ce message
Sujets en rapport avec ce message
concatenation [ par asmv ]
//a partir d'elements de tableau 'int' transformes en 'char'//essai de concatenation qui ne fonctionne pas pourquoi ?//merci pour votre aide#include #
Hachage fermé problème de lecture [ par mcflysupersonic ]
Bonjour je suis nouveau sur le forum est ceci est ma première question donc j'espère que je ne me suis pas trompé d'endroit pour poster.Voilà j'ai un
segmentation fault help [ par alabb ]
aidez moi je suis un new bie, j'ai un segmentation fault a la fin du prog:si gagant apres avoir affiché WINNERsi perdant apres avoir affiché "votre s
programme en C [ par graminach ]
on a un pb pour la question 2b!le programme ne tourne pas en boucle et affiche meme en cas de valeur correcte erreurmerci d'avancehttp://www-ipst.u-st
oh non!! [ par bako25 ]
Le prog suivant calcule le nombre des 'e' dans un paragraphe: #include #include<
scanf / printf avec variable char [ par domcergyitin95 ]
Bonjour, je début en C, et j'ai un problème que je n'arrive pas à résoudre, malgré que le reste du programme soit plus complexe et que ça tourne bie
Débutant demande aide en C [ par juancho2786 ]
Bonjour tout le monde. Je voulais vous demandez si mon code était correcte? et comment faire pour aller à la ligne après chaque enregistrement? Merci
problem avec un char[] [ par kibab ]
Bounour a vous tous, je suis nouveau de ce langage et je m'amuse à faire des épreuves diverses.Ici il y a un petit example mais jái un problem:#includ
Lecture et ecriture sur fichier [ par developvbdebut ]
Bonjour tout le mondeJe travaille sur la gestion des fichier en c.Mon livre n'explique pas clairement l'ectriture et la lecture dans les fichiers.Voic
Ouvrir et afficher un fichier texte en C [ par AsM0DeUz ]
'lut Je m'initie actuellement au C. Apres avoir fait les exos les plus basiques ... je passe au basique niveau 2 J'ai ecris qques lignes pour afficher
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|