Probleme recuperation de données c
hadrienlearn
-
hadrienlearn -
hadrienlearn -
Bonjour,
Un nouveau problème se présente a moi.
Lors de la récupération des donnée dans mon fichier data, les données ne sont pas correctement emmagasiner dans la structure profil.
save.data
ma fonction:
print:
J'ai beaux tester de nombreuses methode il semble que le fscanf ne marche pas!
Merci d'avance a ceux qui souhaiterai m'aider :).
Un nouveau problème se présente a moi.
Lors de la récupération des donnée dans mon fichier data, les données ne sont pas correctement emmagasiner dans la structure profil.
save.data
Hadrien 12313215 Laurent 12321321 Helory 1231231
ma fonction:
int load_rep(void)
{
int i;
signed char n_name[MAX_NAME_CHAR], n_tel[MAX_TEL_CHAR];
FILE *save = fopen("save.data", "r");
if(save==NULL)
return 1;
int size = get_file_size(save);
myRep = realloc(myRep, size*sizeof(pers));
printf("size : %d\n", size);
for(i=1;i<size;i++)
rep_size++;
printf("Fichier data trouvée!\n");
printf("Lancement de la récupération des données\n");
for(i=0;i<rep_size;i++)
{
fscanf(save, "%s %d ", myRep[i].name, myRep[i].tel);
printf("NAME : %s | TEL : %s\n", myRep[i].name, myRep[i].tel);
}
printf("Données récupérer avec succée\n");
fclose(save);
return 0;
}
print:
size : 3 Fichier data trouv├®e! Lancement de la r├®cup├®ration des donn├®es NAME : | TEL : NAME : | TEL : NAME : u | TEL : d Donn├®es r├®cup├®rer avec succ├®e
J'ai beaux tester de nombreuses methode il semble que le fscanf ne marche pas!
Merci d'avance a ceux qui souhaiterai m'aider :).
Configuration: Windows / Chrome 97.0.4692.99
2 réponses
-
En effet il manque une tres grosse partie de mon programme que je n'ai pas mis pour ne pas surcharfer le post.
voici la version dans sa globalité#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <stdbool.h> #define MAX_NAME_CHAR 20 #define MAX_TEL_CHAR 9 #define REP_SIZE 3 typedef struct person { char name[MAX_NAME_CHAR]; char tel[MAX_TEL_CHAR]; }pers; void input_person(pers *sp); void input_rep(void); void print_rep(void); int find_in_rep(void); void save_rep(void); int load_rep(void); int get_file_size(FILE *file); void add_profil(void); // fonction ultime pers *myRep; size_t rep_size=1; int main(int argc, char *argv[]) { bool load = false; int choose, s1, s2, size; myRep = calloc(rep_size, sizeof(pers)); FILE *tryfindfile = fopen("save.data", "r"); if(tryfindfile==NULL) { printf("Echec de la recherche du fichier data\n"); input_rep(); } else load = true; if(load==true) load_rep(); print_rep(); do { do { printf("\nMenu:\n"); printf("1-afficher le contenu du répertoire\n"); printf("2-chercher le numéro d'une personne\n"); printf("3-sauvegarder le répértoire\n"); printf("4-ajouter un profil\n"); printf("5-quitter le programme\n"); printf("Votre choix : "); scanf("%d", &choose); } while(choose < 1 || choose > 5); switch(choose) { case 1: print_rep(); break; case 2: if(find_in_rep()==0) printf("ERREUR : NOM INTROUVABLE\n"); break; case 3: save_rep(); break; case 4: add_profil(); break; default: break; } } while(choose!=5); save_rep(); return 1; } void input_person(pers *sp) { printf("Name : "); scanf("%s", sp->name); printf("Tel : "); scanf("%s", sp->tel); return; } void input_rep(void) { int i; printf("Veuillez saisir votre premier contact :\n"); input_person(&myRep[0]); printf("Rep saisit avec succe!\n"); return; } void print_rep(void) { printf("Lancement de l'affichage du rep\n"); int i; for(i=0;i<rep_size;i++) { printf("-------------------------------------\n"); printf("Name : %s\n", myRep[i].name); printf("Tel : %s\n", myRep[i].tel); printf("-------------------------------------\n"); } printf("Fin de l'affichage du repertoire\n"); return; } int find_in_rep(void) { int i; char name_to_find[MAX_NAME_CHAR]; printf("Outil de recherche dans le rep :\n"); printf("Entrer un nom :"); scanf("%s", name_to_find); printf("\n"); for(i=0;i<rep_size;i++) { if(strcmp(name_to_find, myRep[i].name)==0) { printf("Trouvé!\n"); printf("Num : %s", myRep[i].tel); return 1; } } return 0; } void save_rep(void) { FILE *save = fopen("save.data", "w"); int i; for(i=0;i<rep_size;i++) { fputs(myRep[i].name, save); fputc(' ', save); fputs(myRep[i].tel, save); fputc(' ', save); fputc('\n', save); printf("Profil %d enregistrer dans le fichier data.\n", i+1); } fclose(save); return; } int load_rep(void) { int i; signed char n_name[MAX_NAME_CHAR], n_tel[MAX_TEL_CHAR]; FILE *save = fopen("save.data", "r"); if(save==NULL) return 1; int size = get_file_size(save); myRep = realloc(myRep, size*sizeof(pers)); printf("size : %d\n", size); for(i=1;i<size;i++) rep_size++; printf("Fichier data trouvée!\n"); printf("Lancement de la récupération des données\n"); for(i=0;i<rep_size;i++) { fscanf(save, "%s %d ", myRep[i].name, myRep[i].tel); printf("NAME : %s | TEL : %s\n", myRep[i].name, myRep[i].tel); } printf("Données récupérer avec succée\n"); fclose(save); return 0; } int get_file_size(FILE *file) { int size=0; signed char str[MAX_NAME_CHAR+MAX_TEL_CHAR]; while(fgets(str, MAX_NAME_CHAR+MAX_TEL_CHAR-1, file)!=NULL) size++; return size; } void add_profil(void) { signed char new_name[MAX_NAME_CHAR]; signed char new_tel[MAX_TEL_CHAR]; printf("Veuillez entrer le nom du nouveau profil : "); scanf("%s", new_name); printf("Veuillez entrer le tel du nouveau profil : "); scanf("%s", new_tel); myRep = realloc(myRep, (rep_size+1)*sizeof(pers)); ++rep_size; strcpy(myRep[rep_size-1].name, new_name); strcpy(myRep[rep_size-1].tel, new_tel); print_rep(); return; }
Merci pour la réponse rapide c'est assez impressionnant le travail que vous effectuer sur se forum -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
j'ai beau regarder partout, j'ai l'impression qu'il manque une partie de ton programme.