Ajout dans un fichier en c
mounia
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
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);}
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:
- Ajout dans un fichier en c
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
4 réponses
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.
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.
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);}
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);}
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.
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.