- Programme 1: Création
#include <stdlib.h>
typedef struct {int jour,mois,annee;} tDate;
typedef struct {char nom[20],prenom[20],poste[20]; tDate date; } tEmploye;
typedef struct {char poste[20]; float salaire; } tPoste;
int getFichEmploye(char *);
int main(){
getFichEmploye("listEmploye.txt");
return 0;
}
int getFichEmploye(char *nomFichier){
FILE *ptFichier;
tEmploye employe;
int comp,nbrEmploye;
printf("Donner le nbr d'employes : ");
scanf("%d",&nbrEmploye);
ptFichier=fopen(nomFichier,"wt");
if(!ptFichier){printf("\n La creation de fichier a echouee!");return 1;}
for(comp=0;comp<nbrEmploye;comp++){
printf("Entrez le nom de la personne N%d: ",comp+1);
scanf("%s", employe.nom); // sans espaces
fprintf(ptFichier, "%s\t", employe.nom);
printf("Entrez le prenom de %s : ",employe.nom);
scanf("%s", employe.prenom);
fprintf(ptFichier, "%s\t",employe.prenom);
printf("Donner le poste de %s %s:",employe.nom,employe.prenom);
scanf("%s",employe.poste);
fprintf(ptFichier, "%s\t",employe.poste);
printf("Donner la date de recrut de %s %s (jj/mm/yyyy):",employe.nom,employe.prenom);
scanf("%d/%d/%d",&(employe.date.jour),&(employe.date.mois),&(employe.date.annee));
fprintf(ptFichier, "%d/%d/%d\n",employe.date.jour,employe.date.mois,employe.date.annee);
}
fclose(ptFichier);
return 0;
}
- Programme 2: Lecture
#include <stdlib.h>
typedef struct {int jour,mois,annee;} tDate;
typedef struct {char nom[20],prenom[20],poste[20];tDate date;} tEmploye;
int affichListEmploye(char *);
int main(){
affichListEmploye("listEmploye.txt");//ajouter le chemin
return 0;
}
int affichListEmploye(char *fichEmploye)
{
FILE *ptFichEmploye;
tEmploye employe={"","","",{0,0,0}};int i=1;
ptFichEmploye = fopen(fichEmploye,"rt");
if(!ptFichEmploye){
printf("Impossible d'ouvrir le ficher %s, arret d'execution",fichEmploye);
return 1;
}
while(!feof(ptFichEmploye)){ //on suppose le fichier non vide
fscanf(ptFichEmploye,"%s\t",employe.nom);
fscanf(ptFichEmploye,"%s\t",employe.prenom);
fscanf(ptFichEmploye,"%s\t",employe.poste);
fscanf(ptFichEmploye,"%d/%d/%d\n",&(employe.date.jour),&(employe.date.mois),&(employe.date.annee));
printf("\nNom%3d:%s\tPrenom:%s\tPoste:%s",i++, employe.nom,employe.prenom,employe.poste);
printf("\tdate recrut:%d/%d/%d",employe.date.jour,employe.date.mois,employe.date.annee);
}
fclose(ptFichEmploye);
return 0;
}
- Remarks/Further reading
- Sous linux: affichListEmploye("/votre/chemin/listEmploye.txt");
- Sous Windows : dans le chemin, ne pas oublier de doubler les \ (corrigé suite a la remarque de IcyRaceHoeses)
2. Resolution du pb de fichier existant mais vide: On remplace les lignes 20 à 27 par:
while(1){
fscanf(ptFichEmploye,"%s\t",employe.nom);
if(feof(ptFichEmploye)){printf("\n fichier vide, arret d'execution"); fclose(ptFichEmploye);return 1;}
fscanf(ptFichEmploye,"%s\t",employe.prenom);
fscanf(ptFichEmploye,"%s\t",employe.poste);
fscanf(ptFichEmploye,"%d/%d/%d\n",&(employe.date.jour),&(employe.date.mois), &(employe.date.annee));
printf("\nNom%3d:%s\tPrenom:%s\tPoste:%s",i++, employe.nom,employe.prenom,employe.poste);
printf("\tdate recrut:%d/%d/%d",employe.date.jour,employe.date.mois,employe.date.annee);
}
3. EOF bien expliqué:
https://latedev.wordpress.com/2012/12/04/all-about-eof/
4. Gestion de repertoires en C (hors programme MI)
http://www.thegeekstuff.com/2012/06/c-directory/
while(1){
fscanf(ptFichEmploye,"%s\t",employe.nom);
if(feof(ptFichEmploye)){printf("\n fichier vide, arret d'execution"); fclose(ptFichEmploye);return 1;}
fscanf(ptFichEmploye,"%s\t",employe.prenom);
fscanf(ptFichEmploye,"%s\t",employe.poste);
fscanf(ptFichEmploye,"%d/%d/%d\n",&(employe.date.jour),&(employe.date.mois), &(employe.date.annee));
printf("\nNom%3d:%s\tPrenom:%s\tPoste:%s",i++, employe.nom,employe.prenom,employe.poste);
printf("\tdate recrut:%d/%d/%d",employe.date.jour,employe.date.mois,employe.date.annee);
}
3. EOF bien expliqué:
https://latedev.wordpress.com/2012/12/04/all-about-eof/
4. Gestion de repertoires en C (hors programme MI)
http://www.thegeekstuff.com/2012/06/c-directory/