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);
}