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
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
A voir également:
- Ajout dans un fichier en c
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir un fichier .bin - Guide
- Fichier host - Guide
4 réponses
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
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.
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);}
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
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.
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.