|
|
|
|
Bonjour,
Je suis un peu perdu pour réaliser le code d'un projet.
A partir d'un fichier "contact.txt", je dois récupérer les données inscrites de la façon suivante "NOM PRENOM NUMERO EMAIL" avec un contact par ligne.
Je dois ensuite les ranger dans une liste chainée, puis trier cette liste chainée dans l'ordre alphabétique des noms pour enfin l'afficher.
Voilà mon début, pour commencer à remplir la liste chainée, j'aimerais savoir si je pars dans la bonne direction.
[cpp]
typedef struct contact_liste { // on définit la structure qui contiendra les infos du contact
char nom[30];
char prenom[30];
int numero[30];
char email[30];
struct contact_liste *suivant;
}contact;
typedef struct Liste_Repere { // on définit la structure pour avoir le contrôle sur la liste chainée contact_liste. On indique le premier élément, le dernier élément et le nombre d'éléments.
contact *debut;
contact *fin;
int taille;
}Liste;
void initialisation (Liste *liste){ // on initialise la liste chainée. liste est un pointeur de type Liste
liste->debut = NULL;
liste->fin = NULL;
taille = 0;
}
int insertion_dans_liste_vide (Liste * liste, char *NOM, char *PRENOM, int *NUMERO, char *EMAIL){
contact *nouveau_contact;
if ((nouveau_contact = (contact *) malloc (sizeof(contact)) == NULL)
{
printf("Erreur d'allocation mémoire" );
return -1;
}
else
{
strcpy (nouveau_contact->nom, NOM);
strcpy (nouveau_contact->prenom, PRENOM);
strcpy (nouveau_contact->numero, NUMERO);
strcpy (nouveau_contact->email, EMAIL);
nouveau_contact->suivant = NULL;
liste->debut = nouveau_contact;
liste->fin = nouveau_contact;
liste->taille++;
return 0;
}
/cpp
Merci en avance
Configuration: Windows XP Internet Explorer 7.0
Salut,
|
Oui, mais je dois récupérer le numéro dans un fichier, et j'ai vu que si je fais un fscanf(fichier, "%s %s %d %s", ...) et bien il ne me prend pas le 0 de mes numéros de telephonne.
|
#include stdafx.h
|
Attention, nouveau_contact->numero=NUMERO; ... il faut attribuer élément du tableau par élément du tableau
|
sinon, pour ce qui est de tout stocker dans un tableau, je ne pense pas que ça soit une bonne idée. le gros avantage de la liste chainée sur le tableau, c'est que tu ne précise pas la taille. quand tu lis ton fichier, à priori, je ne pense pas que tu saches combien d'enregistrement il contient... le mieux, au niveau de la gestion de la mémoire, est d'enregistrer tes contacts au fur et à mesure que tu les lis. En fait là où je bloque, c'est pour récupérer les données du fichier et les passer dans la liste chainée. Je pensais faire un fgets et tout stocker dans des tableaux intermédiaires, mais comme tu le dis, ce n'est pas la meilleure solution. void récupérer_contact(contact *contact1) #define TAILLE_MAX 30 int carlu; contact lesContacts[TAILLE_MAX]; int i=0; FILE* fichier=NULL; fichier=fopen("contact.txt","r"); // on ouvre le fichier contact.txt if(!fichier) printf("erreur"); // lorsque l'ouverture du fichier echoue else { do { for (i=0; i<=1000; i++) { carlu=fscanf(fichier, "%s %s %s %s", lesContacts[i].nom, lesContacts[i].prenom, lesContacts[i].numéro, lesContacts[i].email);// on rentre les données dans la structure } } while(carlu!=EOF) } fclose(fichier); Ici j'ai supposé qu'il n'y avait pas plus de 1000 contacts dans le fichiers. Je pense qu'il doit y avoir une solution pour utiliser mes fonctions réalisées précédement afin de rentrer les données directement dans un maillon de la liste.
|
Finalement :
|
Je ne comprend pas très bien pourquoi tu fais comme ça, notamment le "precedent = actuel->suivant;"...
|