Ludo1651 Posté(e) le 15 avril 2006 Partager Posté(e) le 15 avril 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;} Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xfaillez Posté(e) le 15 avril 2006 Partager Posté(e) le 15 avril 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ludo1651 Posté(e) le 15 avril 2006 Auteur Partager Posté(e) le 15 avril 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) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xfaillez Posté(e) le 15 avril 2006 Partager Posté(e) le 15 avril 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ludo1651 Posté(e) le 15 avril 2006 Auteur Partager Posté(e) le 15 avril 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 ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 15 avril 2006 Partager Posté(e) le 15 avril 2006 Utilise la balise [ code ] pour coller du code source : c'est beaucoup plus lisible, et ça garde l'indentation. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ludo1651 Posté(e) le 24 avril 2006 Auteur Partager Posté(e) le 24 avril 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.