Probleme recuperation de données c

Fermé
hadrienlearn - 6 févr. 2022 à 14:02
 hadrienlearn - 6 févr. 2022 à 14:55
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
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
1
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
6 févr. 2022 à 14:21
bonjour,
j'ai beau regarder partout, j'ai l'impression qu'il manque une partie de ton programme.
0