Sie sind auf Seite 1von 4

IUT de Villetaneuse

TP7 : chier (Corrig)


Exercice 1 : Caractres

ecrivez une fonction c qui prend en argument le nom dun chier et ache le nombre de caractres de ce chier.

Exercice 2 : criture dun chier texte

ecrivez un programme qui ache le contenu dun chier texte en faisant prcder chaque ligne par son numro.

Exercice 3 : lecture dun chier

ecrivez un programme qui ache le nombre de ligne contenue dun chier texte.

Exercice 4 : caractre majuscules

ecrivez un programme qui ache le contenu dun chier texte, en passant tous les caractres en majuscules.

1 2 3 4

ecrivez un programme qui cre un Fichier texte nomm "tableX.txt" qui contienne la table de multiplication pour le nombre X (le fchier "table7.txt" contiendra la table de 7), prsente sous la forme suivante :
1 x 7 = 7 2 x 7 = 14 etc... 9 x 7 = 63

Exercice 5 : criture dun chier texte

Exercice 6 : Lectures et critures de chanes

1. crire un programme en C qui lit 10 chanes de caractres tapes par lutilisateur (dune longueur maximale de 100 caractres) et qui les crit dans un chier dont le nom sera demand lutilisateur. Correction :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

#include<stdio.h> #define TAILLE 100 int main(void) { FILE* f; char s[TAILLE]; char nomFic[40]; int i; printf ("\nDonner le nom du fichier:"); gets(nomFic); f=fopen(nomFic,"wt"); if (f == NULL) printf ("Erreur"); else { for (i=0;i<10;i++) {

Langage C

82

1ere anne

Dpartement informatique printf ("donnez votre texte dune longueur maxi de 100 caractres\n"); gets(s); // cf. remarque ci-dessous fputs (s,f); // une criture dans le fichier fputs ("\n",f); // crit le retour la ligne } fclose (f); // ajoute EOF au fichier et ferme le fichier } }
Remarque :la fonction gets est dangereuse car elle ne teste pas sil y a plus de 100 caractres (voir man gets). En toute rigueur, il faut utiliser fgets(s, 100, stdin); 3

18 19 20 21 22 23 24 25

2. Ecrire une fonction en C lireChaine qui ouvre un chier texte en lecture et qui ache lcran tous les enregistrements (dune longueur maximale de 100 caractres) lus dans le chier. Le nom du chier est en paramtre. Ecrire un programme principal qui appelle cette fonction avec le chier cr dans la question prcdente). Rappel : en n de chier, fgets] positionne un indicateur quon lon teste avec la fonction feof. Correction :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

#include<stdio.h> #include<stdlib.h>

void lireChaine (char nomFic[]) { FILE* f; char s[100]; f=fopen(nomFic,"rt"); if (f==NULL) printf ("Erreur"); else { fgets (s,100,f); // il faut lire une premire fois pour positionner EOF while (!feof(f)) { printf ("%s",s); fgets (s,100,f); } fclose (f); } } int main() { lireChaine ("titi"); // titi cest le nom du fichier de la question 1) }

Exercice 7 : Lectures et critures formates


1. Ecrire une fonction en C sauverEntText qui sauvegarde tous les nombres compris entre 100 et 110 ( raison dun par ligne) dans un chier texte dont le nom est pass en paramtre. Ecrire un programme principal qui appelle cette fonction. Correction :
1

#include<stdio.h>

1ere anne

83

Langage C

IUT de Villetaneuse #include<stdlib.h> void sauverEntText(char nomFic[]) { FILE* f; int i; f = fopen(nomFic,"wt"); if (f==NULL) printf ("Erreur"); else for (i=100;i<111;i++) fprintf (f, "%d\n", i); // attention fputs ne fonctionne pas car ce ne sont pas des chaines fclose (f); } int main() { char nomFic[40]; printf ("\n Donner le nom du fichier:"); gets(nomFic); sauverEntText(nomFic); }

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

2. Ecrire une fonction en C lireEnt qui lit et ache lcran les enregistrements dun chier texte dont le nom est en paramtre. Ces enregistrements sont des entiers. Ecrire galement un programme principal qui appelle cette fonction avec le chier cr la question 1). Rappel : en n de chier, fscanf renvoie EOF et positionne un indicateur quon lon teste avec la fonction feof. Correction :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

#include<stdio.h> #include<stdlib.h>

void lireEnt (char nomFic[]) { FILE* f; int i; f = fopen(nomFic,"rt"); if (f==NULL) printf ("Erreur"); else { fscanf (f,"%d\n",&i); // une premire lecture while (!feof(f)) { printf ("%d \n", i); fscanf (f,"%d\n",&i); } fclose (f); } } int main() { lireEnt ("toto"); // toto cest le nom de mon fichier en a) }

Langage C

84

1ere anne

Dpartement informatique
Remarques : On peut utiliser un fgets suivi dun atoi. En n de chier fscanf renvoie EOF, on a donc aussi la solution suivante.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

#include<stdio.h> #include<stdlib.h> void lireEnt (char nomFic[]) { FILE* f; int i; f = fopen(nomFic,"rt"); if (f==NULL) printf ("Erreur"); else { while (fscanf(f,"%d\n",&i)!=EOF) printf ("%d \n", i); fclose (f); } }

1ere anne

85

Langage C

Das könnte Ihnen auch gefallen