Trier un fichier à l'aide de liste chainée

Fermé
max3105 Messages postés 1 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 23 février 2008 - 23 févr. 2008 à 16:14
laura1986 Messages postés 2 Date d'inscription lundi 23 mars 2009 Statut Membre Dernière intervention 26 mars 2009 - 26 mars 2009 à 10:46
Bonjour, voilà pour mes étude j'ai un projet d'informatique à faire dans lequel une des fonctions est de trier un fichier texte contenant le nom le prénom le numéro de portable ainsi que l'email de personnes. il y a une personne par ligne. Mais le fichier dont on connait le nom n'est pas forcément trier à la base. D'où ma fonction. Voilà j'ai écrit ce code mais mon compilateur m'indique trois erreurs concernant les codes en gras.
Ces erreurs sont toutes les trois identiques:
error C2664: 'strcpy' : cannot convert parameter 2 from 'char' to 'const char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast.
Donc j'aimerais savoir ce qu'il faut faire pour les corriger et pourquoi si possible, puis si il y a d'autres erreurs...(en particulier pour l'affectation des pointeurs si les allocations mémoire marchent

voici le code:

#include<stdafx.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>

typedef struct contact
{
char nom[50];
char prenom[50]; //définition de la structure d'une personne
int portable;
char email[50];
struct contact *suivant;
}contact;

typedef contact* ptr_contact; //définition d'un type correspondant à un pointeur sur contact

void charger(ptr_contact);
void ajout(ptr_contact ,char[50] ,char[50] ,int ,char[50]); //déclaration de mes fonctions annexes
void trier(ptr_contact);
void remplir(char [13],ptr_contact);
void liberer(ptr_contact);

void main ()
{
ptr_contact liste=NULL;
char texte[]="contacts.txt"; // fonction principale
charger(liste);
trier(liste);
remplir(texte,liste);
}

void charger(ptr_contact liste) //Elle est censée copier le fichier dans une liste chainée de structures
{
FILE* fichier=NULL;
fichier=fopen("contact.txt","r");
char NOM[50],PRENOM[50],EMAIL[50];
int PORTABLE;
if(!fichier)
printf("erreur"); //lorsque l'ouverture du fichier echoue
else
{
while(fscanf(fichier,"%s %s %d %s\n",NOM, PRENOM, &PORTABLE, EMAIL))
{ //effectuer la boucle tant que l'on est pas à la fin du fichier
ajout(liste,NOM,PRENOM,PORTABLE,EMAIL);
}
}
fclose(fichier);
}

void ajout(ptr_contact liste, char NOM, char PRENOM, int PORTABLE, char EMAIL)
{
ptr_contact pcourant;
pcourant=(ptr_contact) malloc(sizeof(contact)); //la fonction crée un pointeur sur une structure vide
strcpy(pcourant->nom,NOM); //qu'il remplit à l'aide des données transmises
strcpy(pcourant->prenom,PRENOM);
pcourant->portable=PORTABLE;
strcpy(pcourant->email,EMAIL);
pcourant->suivant=liste;
liste=pcourant;
}

void trier(ptr_contact liste) //cette fonction compare l'ordre alphabétique des contacts et les
//déplace si ce dernier n'est pas bon
ptr_contact pcourant;
{
contact tampon;
if(liste)
{
for(pcourant=liste->suivant;pcourant;pcourant=pcourant->suivant)
{
if(stricmp(liste->nom,pcourant->nom)>0)
{
strcpy(tampon.nom,liste->nom);
strcpy(tampon.prenom,liste->prenom);
tampon.portable=liste->portable;
strcpy(tampon.email,liste->email);

strcpy(liste->nom,pcourant->nom);
strcpy(liste->prenom,pcourant->prenom);
liste->portable=pcourant->portable;
strcpy(liste->email,pcourant->email);

strcpy(pcourant->nom,tampon.nom);
strcpy(pcourant->prenom,tampon.prenom);
pcourant->portable=tampon.portable;
strcpy(pcourant->email,tampon.email);
}
trier(liste->suivant);
}
}
}

void remplir(char texte, ptr_contact liste)
{
FILE* fichier;
fichier=fopen("contacts.txt", "w+"); //cette fonction elle réecris le fichier à partir de la liste chainée qui est
ptr_contact pcourant=liste; //dans l'ordre alphabétique
while(liste)
{
fprintf( fichier,"%s %s %d %s\n",liste->nom, liste->prenom, liste->portable, liste->email);
liste=liste->suivant;
}
fclose(fichier);
liberer(pcourant);
}


void liberer(ptr_contact liste)
{
ptr_contact tampon, pcourant;
for(pcourant=liste;pcourant;)
{
tampon=pcourant->suivant;
free(pcourant); //Enfin cette fonction efface la liste chainée
pcourant=tampon;
}
}

Merci
A voir également:

1 réponse

laura1986 Messages postés 2 Date d'inscription lundi 23 mars 2009 Statut Membre Dernière intervention 26 mars 2009 1
26 mars 2009 à 10:46
Bonjour,
struct unite
{
char lex[50],val[50],type[10];
}, typedef struct unit UNITE;


struct unite_lex
{
char lex[50],val[50],type[10];
struct unite_lex*next;
}; typedef struct unite_lex LISTE;


void charger_liste_buttom(LISTE **first,UNITE t)
{
}

permet de charger à la fin de la liste l'unité lexicale t de type UNITE paseé en adresse?

rechercher(LISTE*first,UNITE *t)
{
}

chercher l'unité lexical t dans la liste chaineé ayant pour premier élement*first

UNITE ranger(LISTE **first,char*s,char*k)
{
}
cette fonction fait appel à la fonction précédente rechercher,si l'unité est trouvée dans la table,on l'insère à la fin de la liste de sortie(résultante)

void charger(UNITE*t,char*lex,char*val)
{
}
permet de charger la table décrivant la sturcture d'une unité lexicale(lex,val et type dans notre cas)

is letter(char a)
{
}
vérifier si le caractère lu est une lettre



svp aide moi à le résoudre
1