Aller au contenu

Pb en C


Ludo1651

Messages recommandés

salutations,

voilà tout

je suis en train de faire un exo, en C. Je dois faire un programme qui gère un répertoire téléphonique avec toutes les fonctions re cherches et autres .

en ce moment, je travaille sur une fonction qui charge l'agenda à partir d'un fichier. ça compil, mais ça m*** à l'exécution (segmentation fault), je ne sais plus quoi faire.

typedef struct

{

int bPresent;

char pcPrenom[20];

char pcNom[20];

char pcTel[14];

} ELEMENT_AGENDA

int charge_a(ELEMENT_AGENDA *agenda)

{

int i;

char c;

FILE* fc;

fc = fopen("fichier.txt","r");

char* tab_acqui;

tab_acqui=(char*)(malloc(sizeof(char)*100));

//initialisation de tab_acqui

int j;

for (j=0;j<100;j++)

{

tab_acqui[j]='';

}

for(i=0; i<100; i++)

{

// fscanf(fc, "%s %c %d %s %s %s\n",&agenda[i].pcNom,c,i,&agenda[i].pcNom, &agenda[i].pcPrenom,&agenda[i].pcTel);

// on avait pour première idée d'utiliser un fscanf par personne dans l'agenda mais le fscanf ne permet absolument pas la lecture sur plusieurs lignes

fgets(tab_acqui[i],10,fc);

agenda[i].bPresent=(int)(tab_acqui[i]);

fgets(agenda[i].pcNom,20,fc);

fgets(agenda[i].pcPrenom,20,fc);

fgets(agenda[i].pcTel,14,fc);

}

fclose(fc);

return 0;

}

Lien vers le commentaire
Partager sur d’autres sites

tab_acqui n'est pas un tableau de pointeurs mais un pointeur donc un tableau de char si on veut simplifier. Ton utilisation dans le fgets() est donc erronée.

fscanf() est la fonction qu'il te faut ou alors fgets() et sscanf().

Pour lire le fichier en entier ligne par ligne puis extraire les données, tu fais :

char ligne[255];
while(fgets(ligne, sizeof ligne, fc))
{
 sscanf(ligne, "%s %c %d %s %s %s",agenda[i].pcNom,&c,&i,agenda[i].pcNom, agenda[i].pcPrenom,agenda[i].pcTel);
}

en supposant que agenda est un ELEMENT_AGENDA.

Attention aussi dans ton fscanf(). Tu as mis des '&' pour les chaines, il n'en faut pas puisque le nom d'une chaine est déjà l'adresse du premier élément de celle-ci. Et au contraire, pour un int ou un char, il faut le '&'.

sscanf() fait la même chose que fscanf() sauf qu'au lieu d'extraire directement du fichier, elle lit une chaine déjà existante.

C'est cette méthode que j'utilise en général.

Lien vers le commentaire
Partager sur d’autres sites

ça l'air cool ta solution, je suis content de découvrir le sscanf :francais:

tu me parles d'un fscanf, mais la solution que j'ai proposée ne marche pas, et ce malgré les tests effectués, pourrais me dire ce qui n'est pas bon là-dedans stp.

parcontre sur le char tab_acui, je suis perdu . ce que je veux faire en fait c'est un tableau de char pour y mettre ce que je prends du fichier pour ensuite les convertir pour les mettre dans les agenda.bPresent. peux tu me filer la meilleure définition de de ce tableau ? parce que à force de me prendre la tête dessu, je m'abrutis ( déà que je n'étais pas un champion des pointeurs)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...