Ajout dans un fichier en c

Fermé
mounia - 9 janv. 2011 à 10:13
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 13 janv. 2011 à 08:36
Bonjour,

Je suis debutante dans le langage C SVP est ce que quelqu'1 peut m'aider voila j'ai besoin de réaliser une fonction qui ajoute un employé dans un fichier sachant qu'on ne doit pas ajouter un employé qui existe deja voila le programme que j'ai fait mais ça ne marche pas je sais pas pourquoi .merci d'avance pour votre coup de main

void nouvel_emp()
{FILE *f; struct employe e,e1;
f=fopen("d:\\Employe.txt","a");
puts("\n\n");
printf("\t -Matricule:");
scanf("%d",&e1.mat);
if(e.mat==e1.mat) {printf("Retaper le matricule:"); getch(); scanf("%d",&e1.mat);}
printf("\t -Nom:");
fflush(stdin);
gets(e1.nom);
printf("\t -Prenom:");
fflush(stdin);
gets(e1.pren);
printf("\t -Salaire de base:");
scanf("%f",&e1.sal);
printf("\t -Code de la region:");
scanf("%d",&e1.code);
if(e1.code<0) {printf("Retaper le code:"); getch(); scanf("%d",&e1.code);}
fprintf(f,"%d:%s %s\n %.2f:%d\n",e1.mat,e1.nom,e1.pren,e1.sal,e1.code);
fclose(f);}
A voir également:

4 réponses

il faut que tu crée une structure à chaque employé.
pas une pour chaque employé
0
tu peux donner plus d'explication STP, merci
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
10 janv. 2011 à 14:27
Salut.
Tu n'initialises pas la structure e et pourtant tu t'en sers pour taper le matricule.
fflush(stdin); n'est pas standard, il ne faut pas l'utiliser, ça peut faire des bug.
normalement, après ça, tu devrais pouvoir ajouter facilement un nouvel employé. Ensuite, pour ne pas dupliquer, il faut commencer par lire l'ensemble du fichier et stocker le matricule dans un tableau puis faire des comparaisons avec ce tableau.
0
Vous pouvez corriger cette fonction SVP

void nouvel_emp()
{FILE *f; struct employe e; struct employe e1; int i=0,n,test=-1;
f=fopen("d:\\Employe.txt","a+");
puts("\n\n");
printf("\t -Matricule:");
scanf("%d",&e1.mat);
fseek(f,0,2); n=ftell(f);
fseek(f,0,0);
for(i=0;i<n;i++)
{fscanf(f,"%d: %s %s\n %.2f: %d",&e.mat,e.nom,e.pren,&e.sal,&e.code);
if(e.mat!=e1.mat)
{ test=1;
printf("L'employe n'existe pas \n");
printf("\t -Nom:\n");
scanf("%s",e.nom);
printf("\t -Prenom:\n");
scanf("%s",e.pren);
printf("\t -Salaire de base :\n");
scanf("%f",&e1.sal);
printf("\t -Code de region :\n");
scanf("%d",&e1.code);
fseek(f,i,0);
fprintf(f,"%d: %s %s\n %.2f: %d",e.mat,e1.nom,e1.pren,e.sal,e.code);
}
else
{
printf("L'employe existe deja \n");
getch();
printf("\t -Matricule:\n");
scanf("%d",&e1.mat);
}}

fclose(f);}
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
13 janv. 2011 à 08:36
Salut.
l'algorithme n'est pas bon du tout. "n" ne représente pas le nombre de ligne ou de structure, mais le nombre d'octet dans le fichier. Ta boucle "for" sur i de 0 à n est donc mauvaise. Pour les fichiers, il vaut mieux faire une boucle while avec comme condition d'arret EOF ou la non lecture de données.
Revenons à l'algorithme, tu charge le premier employé dans le fichier et si son matricule est le n'est pas le même tu dit qu'il n'existe pas. Il faut prendre dans l'autre sens. Tu lis chaque employé du fichier et si le matricule est le même tu mets test à 1. à la fin de la boucle si test vaut 1 tu sais qu'il existe déjà, sinon qu'il n'existe pas et tu peux le rentrer.
0