Jump to content

Pb en C


Recommended Posts

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;

}

Link to comment
Share on other 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.

Link to comment
Share on other 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)

Link to comment
Share on other sites

Le problème avec ton fscanf() ce sont les & en trop et les & en moins comme je te l'ai dit dans mon message :francais:

Essaie de corriger ça puis essaie de nouveau.

Par ailleurs, faut être sûr que ton fichier contient au moins 100 lignes vue la méthode que tu utilises.

Link to comment
Share on other sites

  • 2 weeks later...

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...