cs_REQVIEM
Messages postés2Date d'inscriptionmercredi 2 avril 2008StatutMembreDernière intervention 8 avril 2008
-
3 avril 2008 à 22:30
cs_REQVIEM
Messages postés2Date d'inscriptionmercredi 2 avril 2008StatutMembreDernière intervention 8 avril 2008
-
8 avril 2008 à 21:12
Bonjour,
Je suis en école d'ingé et on a un projet a réaliser en C. On doit réaliser un Répertoire téléphonique en Liste Chainée de structure à partir d'un fichier texte dont les contactes ont été rajouté au préalable.
Dans un premier temps, mon code pour extraire les données du fichier texte et le transformer en Liste Chainée ne m'a pas trop posé de problème.
En revanche, par la suite je dois trier les contactes par Nom issu de la Liste Chainée, c'est a ce moment la que je suis bloqué, et que je demande votre aide. J'ai consulté pendant plusieur heure tout les sujets se ramenant au Liste Chainée et au tri, mais soit le sujet diffère trop du mien soit je n'y comprend rien, d'ou ce ma demande d'aide.
Je vois graphiquement comment je dois comparer, je sais aussi que je dois utilise la fonction strcmp pour comparer deux élements de la liste chainée.
Mais je ne sais comment arriver a prendre le premier élement de ma liste et le comparer avec les autres maillons ainsi entre le deuxième et le troisième, au-dela la boucle for s'occupera du reste.
Dans mon code lors de l'estraction des données du fichier texte, j'ai définit un pointeur de structure sur le premier élément de la chaine, or par la suite, ce pointeur va se trouver au dernier maillon, par consequent je n'ai aucun pointeur en Tete de liste a exploiter. De plus, lors de la vérification par un printf de maillon de la liste chainé, la dernière personne du fichier est imprimer 2 fois, j'ai placer un return 0 avant quelle écrive une deuxième fois pour éviter le problème, mais c'est pas très propre dans un programme.
Si vous pouvez m'expliquer comment réaliser le triage, la comparaison des maillons entre eux en m'indiquant la partie du code, cela m'aiderais beaucoup. En ce qui concerne la suite, le décalage du maillon et la suppresion, cela ne devrait pas trop me poser de problème. C'est uniquement la première parti du triage qui me pose problème et qui me bloque.
Je vous remerci du temps consacré a l'avance.
Voici mon fichier texte appellé contact dans le code:
Dupuis Alexis 060102034 [mailto:alexis.dupuis@hotmail.com alexis.dupuis@hotmail.com]
Kervadec Robin 0139750637 nothing
Pinto Eric 0632323223 [mailto:ericlepinto53@hotmail.fr ericlepinto53@hotmail.fr]
Picard Nicolas 06118895 [mailto:nicospicard@live.com nicospicard@live.com]
contact * pCourant;
//Initialisation de la liste chainée
struct
contact *Nouveau;
struct contact *Tete;
//Pointe vers la Tete de la liste
Tete = NULL;
// Ouverture fichier contact
fcontact=fopen(
"contact.txt",
"r");
//Vérificationsi l'ouverture du fichier a réussi
if (fcontact) /* ou (fcontact!=NULL) */
{
//Ajout d'un premier élément à la liste chainée
Nouveau = (contact*)malloc(
sizeof(contact));
Nouveau->pSuivant = Tete;
Tete = Nouveau;
etatLecture=fscanf(fcontact,
"%s %s %s%s",&Nouveau->Prenom, &Nouveau->Nom, &Nouveau->Telephone, &Nouveau->Email);
//lecture du premier contact
printf(
"%s %s %s %s\n\n", Nouveau->Prenom, Nouveau->Nom, Nouveau->Telephone, Nouveau->Email);
//tant que ce n'est pas la fin du fichier
while(etatLecture!=EOF)
{
//Ajout d'un élément en fin de liste
if (Tete != NULL)
//parcours de la liste chaînée jusqu'au dernier noeud
{
pCourant = Tete;
while (pCourant->pSuivant !NULL) pCourant pCourant->pSuivant;
} pCourant->pSuivant = Nouveau;
Nouveau->pSuivant = NULL;
etatLecture=fscanf(fcontact,