Monday, 10 April 2017

TP 12, Codes sources

  • Programme 1: Création
#include <stdio.h>
#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 <stdio.h>
#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
1. Ajouter le chemin du fichier listEmploye.txt en lecture:
  • 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/

6 comments:

  1. >ne pas oublier de faire précéder les espaces par \

    Ce n'est pas vrai, on ne doit pas précéder les espaces par \ en C.

    Pour plus d'informations, veuillez lire ceci: https://icyracehorses.wordpress.com/2017/04/14/spaces-in-filenames-in-c/

    ReplyDelete
  2. Merci, c'est corrigé. En ecrivant a la hate j'ai confondu avec le shell. De toute facon il faut eviter les noms de fichiers et de répertoires avec des blancs.

    ReplyDelete
  3. svp est ce que vous pouvez nous faire un petit résumé sur chapitre 8: synthèse et Analyse et merci

    ReplyDelete
  4. svp est ce que vous pouvez nous faire un petit résumé sur les fichier et mrc

    ReplyDelete
  5. svp est ce que vous pouvez nous faire un petit résumé sur les fichier et mrc

    ReplyDelete

Note: only a member of this blog may post a comment.