Téléchargement
illégal
Posez votre question Signaler

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

max3105 1Messages postés 23 février 2008Date d'inscription - Dernière réponse le 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
Lire la suite 

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

1 réponses
Réponse
+1
moins plus
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
Ajouter un commentaire
Ce document intitulé « Trier un fichier à l'aide de liste chainée » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?