Ludo1651 Posted April 15, 2006 Share Posted April 15, 2006 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_AGENDAint 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 More sharing options...
Xfaillez Posted April 15, 2006 Share Posted April 15, 2006 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 More sharing options...
Ludo1651 Posted April 15, 2006 Author Share Posted April 15, 2006 ça l'air cool ta solution, je suis content de découvrir le sscanf 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 More sharing options...
Xfaillez Posted April 15, 2006 Share Posted April 15, 2006 Le problème avec ton fscanf() ce sont les & en trop et les & en moins comme je te l'ai dit dans mon message 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 More sharing options...
Ludo1651 Posted April 15, 2006 Author Share Posted April 15, 2006 oki merci, bon vu l'heure, j'arrête de coder : déjà que la journée c'est pas puissant, alors la nuit ... Link to comment Share on other sites More sharing options...
Sentinel Posted April 15, 2006 Share Posted April 15, 2006 Utilise la balise [ code ] pour coller du code source : c'est beaucoup plus lisible, et ça garde l'indentation. Link to comment Share on other sites More sharing options...
Ludo1651 Posted April 24, 2006 Author Share Posted April 24, 2006 Mon binome et moi tenions à vous remercier. Grâce à vous on a quasi-fini le projet (nous reste juste à implanter une fonction de comptage de lignes). l'INpactitude on adore Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.