EXERCICE VIII

FIichiers

 

1.      Faire un programme de création d’un fichier texte (caractère par caractère). Afficher le fichier créé. Utiliser fonctions différentes d’entré et sortie.

 

#include <stdio.h>

FILE *writef (char *filename);

int readf (FILE *fp, char *filename);

void main (void)

 {    FILE *file;

char fname[20];

      int ret, number, i;

printf("Entrer le nom de fichier: ");

scanf("%s", fname);

      printf("Entrer texte (ou <CTRL/Z> ).\n");

      file = writef (fname);

      if(file != NULL)

      printf("\nFichier est cree .\n\n");

      ret = readf(file, fname);

      if(ret) printf ("\nFichier est affiche.\n");

 }

FILE *writef (char *filename)

 {    FILE *fp;

      int ch;

      fp = fopen(filename, "w");

      if(fp==NULL)

                  printf ("\nLe fichier %s n'est pas ouvert!\n", filename);

      else

         {        fflush (stdin);

                  while ((ch=getchar()) != EOF)

                              fputc (ch, fp);

                  fclose (fp);

         }

                  return (fp);

 }

int readf (FILE *fp, char *filename)

 {    int ch, flag;

      fp = fopen(filename, "r");

      if(fp==NULL)

        {         printf ("\nLe fichier %s n'est pas ouvert !\n", filename);

                   return (0);

        }

      else

        {         flag = 0;

                  while ((ch=fgetc(fp)) != EOF)

                  {           flag = 1;

                              putchar (ch);

                  }

                  fclose (fp);

                  if (!flag)printf ("Le fichier est vide!\n");

                  return(flag);

        }

 }

 

 

2.      Faire le même programme (de création et d’affichage d’un fichier texte) en utilisant les fonctions d’écrire et lire une ligne de texte (chaîne de caractères) :

int fputs(const char *s, FILE *flot); et              

char *fgets(char *s, int n, FILE *flot);

3.      Modifier le programme de p.2 en ajoutant une fonction nouvelle de déplacer un nombre de lignes donné dans un fichier nouveau et le afficher après.

4.      Faire un programme de création d’un fichier binaire, avec les éléments structures (étudiants). Chaque structure a les champs suivants: nom, groupe, note moyenne. Déterminer l'étudiant avec la note moyenne maximale et afficher à l'écran l'information d'étudiant trouvé.

 

   #include<stdio.h>

   #include<process.h>

   #include<conio.h>

   #include<ctype.h>

   struct student

   {  char name[60];

       int group;

      float av_score;

   };

   FILE *writefile(char *name_file);

   void readfile(FILE *fp,char *name_file);

   void main()

   {  FILE *pf;

       char name_file[30];

       printf("\nEntrer le nom de fichier=>");

       gets(name_file);

       pf=writefile(name_file);

      if(pf!=NULL)

      printf("\n Fichier est creé! \n");

       else

       { printf("\nLe fichier n'est pas creé!\n");

        exit(1);

       }

       readfile(pf,name_file);

   }

   FILE *writefile(char *name_file)

   {  FILE *fp;

       struct student s;

       char ch;

      if((fp=fopen(name_file,"wb"))==NULL)

      { printf("\nLe fichier %s n'est pas creé!\n", name_file);

        exit(1);

      }

       do                                                                                  

      { printf("\n name=>");                                                   

        gets(s.name);                                                            

        printf("\n group=>");

        scanf("%d",&s.group);

        printf("\n av_score=>");

        scanf("%f",&s.av_score);

        while((ch=getchar())!='\n');                                   

        fwrite(&s,sizeof(s),1,fp);

        printf("L'entré d'un élément suivant dans le fichier? Y/N=>");

      } while(toupper(getch())=='Y');

    fclose(fp);

    return(fp);

   }

   void readfile(FILE *fp,char *name_file)

   {  struct student s;

      int flag=0;

      long int pos;

      float max_av;

      if((fp=fopen(name_file,"rb"))==NULL)

      { printf("\nLe fichier n’est pas ouvert !\n");

        exit(1);

       }

    while(fread(&s,sizeof(s),1,fp)==1)

    { if(!flag)

      { max_av=s.av_score;

        pos=ftell(fp)-sizeof(s);                                     

        flag=1;

      }                                                             

      else

        if(s.av_score>max_av)

        {    max_av=s.av_score;

             pos=ftell(fp)-sizeof(s);

        }

    }

    fseek(fp,pos,0);                                                    

    fread(&s,sizeof(s),1,fp);                                       

    printf("\n%s %d %.2f\n",s.name,s.group,s.av_score);

    fclose(fp);

   }

  1. Modifier le programme de p 4 en ajoutant une fonction nouvelle d’afficher à l'écran l'information d'étudiant  d’un groupe donné qui a la note moyenne maximale s’il existe et si non – afficher un message.