Introduction au langage C et programmation
Introduction au langage C et programmation
2018/2019
Informations pratiques
Cours: Grand Amphi, site ENSAJ
Mr Rahhal ERRATTAHI
[email protected]
1
Règles d’or
Organisation
1h15 de cours
Transparents
Publication des supports sur Moodle,
1h30 de TP
Correction du TP précédent, explication du TP courant,
travail sur PC.
2
Evaluation
Objectifs du module
Appréhender le langage C.
3
Références bibliographiques:
Références webographiques:
http://c.developpez.com/cours
https://openclassrooms.com/fr/courses/1526901-apprenez-a-
developper-en-c
4
INITIATION À MOODLE
5
Prof Asmaa El Hannani 2AP-S3 11
6
Prof Asmaa El Hannani 2AP-S3 13
7
Partie 1
LES BASES DU LANGAGE C
Introduction
8
Algorithme vs programme
Classification du langage C
Tous les Languages
de Programmation
Languages Languages
Imperatifs Declaratifs
9
Mise au point d’un programme
Données Résultats
?
10
Mise au point d’un programme: étape 2
1. Définition du problème
données: 4 nombres
objectifs: la moyenne en sortie
2. Choix de la méthode
Additionner tous les nombres et faire la division par 4.
11
Mise au point d’un programme: étape 4
P ANALYSE
R Étude détaillée de l’algorithme correspondant
O
G
R Codage suivant un langage de programamtion
A
M
M Entrée du programme en ordinateur
A
T
I
Exécution
O
N
Prof Asmaa El Hannani 2AP-S3 24
12
Langage C
Histoire du langage C
Origines
C a trois ancêtres : les langages CPL, BCPL et B.
BCPL: (pour Basic CPL) Cambridge en 1966 par Martin Richards. Version
siplifiée Ecriture d’un 1er Compilateur et de divers systèmes
d’exploitations
13
Histoire du langage C
Histoire du langage C
14
Prof Asmaa El Hannani 2AP-S3 29
Introduction au langage C
15
Qu’est ce qu’un programme C?
C’est un texte écrit avec un éditeur de texte, respectant une certaine syntaxe
et stocké sous forme d'un ou plusieurs fichiers (avec l'extension .c).
main()
{
printf(’’Bonjour!’’);
}
file.c
Programme minimum en C
Le programme
commence toujours par Directives préprocesseur – Inclure les
la fonction main bibliothèques
Instruction toujours
terminée par ;
Bloc d’instructions
encadré par des
accolades
16
Phases d’élaboration d’un programme C
L’élaboration d’un programme C passe par 4 phases :
1. Ecriture du code source: Cette phase consiste à écrire le code du programme C en
utilisant un éditeur de texte. Ce code est enregistrer dans un fichier texte
d’extension « .c».
2. Traitement du pré-processeur: Consiste à préparer la phase de compilation en
effectuant les transformations textuelles , dans le code source, suivantes :
L’inclusion de code source (fichiers en-tête (Header) « .h ») : #include
La compilation conditionnelle : #if … #else #end if
Le traitement de macros : #define
3. Compilation: Consiste à traduire le code généré par le pré-processeur en langage
machine. Le résultat de compilation porte le nom de module objet (fichier.o). Ce
module objet n'est pas directement exécutable.
4. Édition de liens: Produit, à partir d'un ou de plusieurs fichiers objets et des
bibliothèques standards, un fichier exécutable (fichier.exe). Outre l'assemblage des
divers fichiers objets, l'édition des liens inclut les définitions des fonctions prédéfinies
utilisées par le programme.
Prof Asmaa El Hannani 2AP-S3 33
main()
{
printf(’’Bonjour!’’);
}
file.c
17
conio.h Fichier2.c Fichier1.c math.h
/* conio.h */ graphics.h #include<conio.h> #include<stdio.h>
stdio.h /* math.h */
. #include<graphics.h> #include<maths.h> .
. /* graphics.h */
. … … /* conio.h */ .
. .
. .
. main() Calcul() .
{ { .
… …
} }
Pré-processeur
Fichier2.i Fichier1.i
/* conio.h */ /* stdio.h */
… …
/* graphics.h */ /* maths.h */
… …
… …
main() Calculs()
{ {
… …
} }
Compilation Math.lib
stdio.lib
Fichier2.o Fichier1.o Graphics.lib
Edition de liens
Options de compilation
Création de l’exécutable
gcc monProg.c imprime1.o –o monProg
Ou bien
gcc monProg.o imprime1.o –o monProg
18
Structure d’une application en C
Programme typique en C
include
Main() est toujours la
1ere fonction appelée
main()
instructions
Prof Asmaa El Hannani 2AP-S3 37
19
Exemple
20
la barre d'outils
la zone principale
la liste des fichiers
du projet
la zone de notification
Eléments de base
21
#include
# include <stdio.h>
main()
{
printf(’’Bonjour!’’);
}
Les commentaires
Il existe trois types de commentaire en C :
Tout texte entre « // » et la fin de la ligne
Tout texte entre « /* » et « */ »: commentaire multi ligne
22
Les identificateurs
Les mots-clés
23
Types et variables
24
Les types dans C
Chacun des 3 peut être nuancé par l’utilisation du qualificatif unsigned pour ne
représenter que des nombres positifs:
Exemple: unsigned short x; x peut aller de 0 à 65 535
pas de bit réservé pour le signe
25
Les types Flottants
float : codé sur 4 octets avec 1 bit de signe, 23 bits de mantisse et 8 bits
d'exposant (3.4 x 10-38 à 3.4 x 1038)
double : codé sur 8 octets avec 1 bit de signe, 52 bits de mantisse et 11 bits
d'exposant (1.7 10-308 à 1.7 10308)
long double : codé sur 10 octets avec 1 bit de signe, 64 bits de mantisse et
15 bits d'exposant (3.4 10-4932 à 3.4 104932)
Le type Char
char : un caractère est un entier signé codé sur 1 octet (-128 à 127)
26
Caractères spéciaux
NOTATION RESULTAT
\a Cloche ou bip (alert ou audible bell)
\b Retour arrière (Backspace)
\f Saut de page (Form Feed)
\n Saut de Ligne (Line Feed)
\r Retour chariot (Carriage Return)
\t Tabulation horizontaLe (HorizontaL Tab)
\v Tabutation verticale (VerticaL Tab)
\\ \
\' ‘
\'' ‘’
\? ?
Type booléen
27
Les conversions de types
La déclaration de variables
Les déclarations des types des variables sont obligatoires et doivent être
regroupées au début du programme. Elles peuvent être soit individuelle ou
groupées :
Le ; est obligatoire
28
La déclaration de variables
char
unsigned short
auuto signed int
register const
long int Identificateur;
static volatile float
extern double
long double
Les constantes
Le ; est obligatoire
Opérateur = obligatoire
Le Type de la constante
29
Opérateurs et Expressions
Les opérateurs du C
30
Les opérateurs de calcul
31
Conversion implicite de type
Promotions numériques
C prévoit que toute valeur char ou short soit d’abord convertie en int.
short n,p; float x; n*x + p
(short * float) + short
Conversion systématique: ( int * float) + int
Conversion implicite : float * float + int
float + float float
32
Exercice
33
Opérateurs d’incrémentation et de
décrémentation
++ : incrémente de 1 la valeur de la variable
On dit que ++ est:
un opérateur de pré incrémentation lorsqu'il est placé à gauche
un opérateur de post incrémentation lorsqu'il est placé à droite
x=3;
//post-incrémentation
y= x++; y=x; x=x+1; //y=3, x=4
//pré incrémentation
y=++x; x=x+1; y=x; //x=y=5
34
Les opérateurs de comparaison
35
Les opérateurs Logiques
Exemples:
n et p sont des entiers, le compilateur accepte des expression telles que:
n && p n||p if ( !n ) if (n == 0)
Remarque2: l’opérateur | | est moins prioritaire que &&. Tous deux sont de
priorité inférieure aux opérateurs arithmétique et relationnels
a<b && c<d équivaut à (a<b) && (c<d)
36
Les opérateurs de décalage de bit
Autres opérateurs
L’opérateur de CAST :
Exemple: n=10, p=3;
(double) (n/p) aura comme valeur 3.0
(double) n/p aura comme valeur 3.33333…
37
Les priorités
38
Partie 2
ENTRÉE-SORTIE ET
STRUCTURES DE CONTRÔLE
Les Entrées-Sorties
1
Les Entrées-Sorties Conversationnelles
2
Les possibilités de la fonction printf
3
printf: Les principaux codes de conversion
Les entiers sont affichés par défaut sans espaces avant ou après.
Les flottants avec six chiffres après le point.
Pour agir sur l’affichage un nombre est placé après % et précise le
nombre de caractère minimum à utiliser.
Exemples: printf("%3d" , n );
n = 20 ^20 // ^ désigne un espace
n=3 ^^3
n = 2358 2358
n = -5200 -5200
4
printf: Action sur le gabarit d’affichage:
Exemples: printf("%f" , x );
x = 1.2345 1.234500
x = 12.3456789 12.345678
printf("%10f" , x );
x = 1.2345 ^^1.234500
x = 1.2345E5 123450.000000
printf("%e" , x );
x = 1.2345 1.234500e+000
x = 123.45 1.234500e+002
pour les flottants, on peut préciser un nombre de chiffres après le point décimal
Exemples: printf("%10.3f" , x );
x = 1.2346 ^^^^^1.235
x = 1.2345E3 ^^1234.500
x = 1.2345E7 12345000.000
Remarques:
Cadrage de l’affichage à gauche :
printf("%-10.3f" , x ); x = 1.2345 1.235^^^^^
Le caractère * figurants à la place d’un gabarit ou une précision signifie
que la valeur effective est fournie dans la liste des arguments de printf:
printf("%8.*f" , n, x ); n=1; x=1.2345 ^^^^^1.2
La fonction printf fournit une valeur de retour (nombre de caractère
affichés)
Prof Asmaa El Hannani 2AP-S3 86
5
printf: Les erreurs de programmation
6
scanf : Les principaux codes de conversion :
c : char
d : int
u : unsigned int
hd : short int
hu : unsigned short
ld : long
lu : unsigned long
f ou e : float écrit en notation "décimale" ou ‘'exponentielle''
Lf ou le : double écrit en notation "décimale" ou ‘'exponentielle''
s : chaîne de caractères dont on fournit l'adresse (notion qui sera
étudiée ultérieurement)
7
scanf : Les règles utilisées par scanf
12^25@ n = 12 p=25
^12^^25^^@ n = 12 p=25
scanf("%d%d" , &n, &p );
12@
@
^25 n = 12 p=25
scanf("%d%c" , &n, &c );
12^a@ n = 12 c=‘ ‘
Sans espace entre deux codes de format, le code de format
%c entraîne la prise en compte du séparateur !
Prof Asmaa El Hannani 2AP-S3 92
8
scanf : On peut imposer un gabarit maximal
espace
9
scanf : Arrêt prématuré de scanf
233^122@
10
scanf : Les erreurs de programmation
11
Les instructions de contrôle
Instruction if
12
Instruction if … else
Instruction if … else
Exemple:
13
Attention aux forêts d’if()
Exemple:
14
Instruction de choix multiples switch
Exemple:
15
Exercice : if-else et switch
#include<stdio.h> case '*':
int main() printf("%d * %d = %d",a,b,a*b);
{ break;
int a,b; case '/':
char c; printf("%d / %d = %f",a,b,(float)a/b);
printf("Entrez a c b:"); break;
scanf("%d %c %d" , &a,&c, &b ); default:
switch (c){ printf("Erreur ! operateur invalide");
case '+': }
printf("%d + %d = %d",a,b,a+b); return 0;
break; }
case '-':
printf("%d - %d = %d",a,b,a-b);
break;
Instruction while
16
Instruction do…while
Instruction for
17
Attention aux boucle sans fin
18
Instruction de branchement continue
19
Instruction de branchement break
20
Exercice : les boucles
#include<stdio.h>
/* Ce programme permet d'afficher la tables de multiplication d’un chiffre
*/
int main ()
{
int i, n; /* declaration de i et n */
int resultat = 0;
printf ("Veuillez entrer un chiffre :");
scanf ("%d",&n);
for (i = 1; i < 10; i++){
resultat = i * n;
printf ("%d x %d = %2d\n",i,n,resultat);
}
return 0;
}
Prof Asmaa El Hannani 2AP-S3 117
21
Partie 3
LES POINTEURS ET LES
TABLEAUX
1. Les pointeurs
2. Les tableaux
Les chaînes de caractères
Les tableaux à plusieurs indices
1
Les pointeurs
2
Déclaration d’un pointeur sur donnée
La déclaration :
Type_donnee *Ident_ptr;
Exemple :
int *pAdi;
int i;
int *pAdi;
3
L’adressage indirect
L’adressage indirect
4
Arithmétique des pointeurs sur données
Exemple
double *pAd; 60 i = 80
int i = 80; 64 xx = 3.1415
double xx=3.1415; 100 pAd = ?
…… 60 i = 80
64 xx = 3.1415
pAd = &xx; 100 pAd = 64
pAd = pAd + i; 60 i = 80
64 xx = 3.1415
/* pAd +i*sizeof(double)
pAd + 80*8 octets */ 100 pAd = 704
Prof Asmaa El Hannani 2AP-S3 127
5
Exercice
Expliquez les valeurs qui vont être afficher.
#include <stdio.h>
int main() {
int var =10;
int *p;
p= &var;
printf ( "%p \n", &var);
printf ( "%p \n", p);
printf ( "%d \n", var);
printf ( "%d \n", *p);
printf ( "%d \n", *(&var));
Printf ( "%p \n", p);
printf ( "%p ", &p);
return 0;
}
Prof Asmaa El Hannani 2AP-S3 128
Les Tableaux
6
Définition et Déclaration
Déclaration:
Type_donnee Ident_Tab [NbElem];
int, double, char …
Ident_Tab : le nom du tableau, c'est le pointeur sur le tableau, c'est la
variable qui contient l'adresse du 1er élément du tableau
NbElem : le nombre d’éléments du tableau
Quelques règles
Chaque élément est repéré par sa position dans le tableau, nommée
indice et qui est placé entre [ ]. Le 1er élément du tableau déclaré
par int tab[20]; sera désigné par tab[0], le 2ème pat tab[1], ….
Un indice peut prendre la forme de n’importe quelle expression
arithmétique de type entier.
La dimension d’un tableau ne peut être qu’une constante ou une
expression constante. #define N 50
Ainsi, cette construction: … est correcte.
int t[N] ;
float h[2*N-1] ;
En revanche, elle ne le serait pas (en C) si N était une constante
symbolique définie par const int N=50, les expressions N et 2*N-1
n’étant alors plus calculables par le compilateur!
Prof Asmaa El Hannani 2AP-S3 131
7
L'initialisation explicite d'un tableau
8
Exemple
t &t[0]
t+1 &t[1]
t+i &t[i]
t[i] *(t+i)
Chaînes de caractères :
Tableau 1D de caractères
Déclaration et initialisation :
char chaine[10];
char source[]="Ma premiere chaine de char";
char lettre[]={'t','a','r','a','t','a','t','a',0};
Format:
printf("\nLe contenu de source est %s",source);
scanf("%s",chaine);
\\ou
gets(chaine);
9
Exemple
char *pfin;
char cBonjour [] = "Bonjour";
pfin = cBonjour + strlen(cBonjour);
do{
printf ("%c",*--pfin);
}while (cBonjour != pfin );
Pour comprendre
strlen(cBonjour) renvoie 7
strlen est une fonction prédéfinie en C, qui donne le
nombre de caractères de la chaine donnée en paramètre.
pfin = cBonjour + 7
10
Tableau de Tableaux
Déclaration:
Type_donne Indent_Tab_Tab[Nlign][Ncol];
Nlign et Ncol sont des constantes entières
Exemple
float mat[3][3];
int trice[3][3]={{1,1,1}, {1,1,1}, {1,1,1}};
printf("%d %d %d", trice[0][0],trice[1][1],trice[2][2]);
scanf("%f",&mat[0][0]); \*ou*\ scanf("%f",mat[0]);
11
Exemple
int t[3][4];
Exercice:
12
Partie 4
LA PROGRAMMATION
MODULAIRE ET LES FONCTIONS
Généralités
1
Les avantages
La mise en œuvre
2
Introduction
Introduction
3
Introduction
Introduction
4
Fonction : Mise en oeuvre
#include <stdio.h>
/* 1) Le Prototypage */
int main()
{
…
/* 3) L'appel */
…
}
/* 2) La définition */
Prof Asmaa El Hannani 2AP-S3 128
Le Prototypage
Syntaxe:
Type_Ret Ident_fonc (Type Argument,…);
Exemples :
double CalcDiscri (double Arga, double Argb, double Argc);
int printf (const char *pFormat,… );
void fdouble (double *pVar);
Localisation :
#include <stdio.h>
//c'est ICI pour le prototypage des fonctions
int main()
{…}
Prof Asmaa El Hannani 2AP-S3 129
5
La Définition
Paramètres formels
Exemple:
double CalcDisc(double Arga,double Argb,double Argc)
{
// Déclaration des variables si besoin
// Instructions
return Argb*Argb-4*Arga*Argc;
}
Localisation:
#include <stdio.h>
int main()
{…}
//c'est ICI les définitions des fonctions
L'appel de la fonction
{ Paramètres effectifs
Double ValDisc;
……
ValDisc = CalcDisc(a,b,c);
……
}
Localisation de l'appel :
Dans n'importe quelle définition de fonction, y compris
dans sa propre définition Récursivité
6
Types de fonctions
Exemple:
/* Une fonction calculant le produit de deux entiers */
/* Param. d'entrée : deux entiers, Type retour : entier */
int calcule_produit (int iExp1, int iExp2)
{
int iProduit;
iProduit = iExp1 * iExp2;
return iProduit;
}
L’instruction return
7
Types de fonctions
Exemple:
/* Procédure affichant le produit de deux entiers */
/* Paramètres d'entrée: deux entiers, Type retour: rien */
void affiche_produit (int iExp1, int iExp2)
{
int iProduit;
iProduit = iExp1 * iExp2;
printf ("Le produit de %d et %d est égal à %d",
iExp1, iExp2, iProduit);
}
8
Exécution : Appel de la fonction
Zone de
8 octets 20.0
réservée
par x
/* A l'intérieur de la fonction
appelante par exemple le main()*/
double x = 20.0;
... Zone de
fonction1 (x); 8 octets
20.0
réservée
par z
9
Après l’exécution
Zone de
8 octets 20.0
réservée
par x
10
Exécution : Appel de la fonction
Zone de
8 octets 20.0
réservée
par x
/* A l'intérieur de la fonction
appelante par exemple le main()*/
double x = 20.0;
... Zone de
fonction1 (&x); 4 octets
&x
réservée
par pz
11
Après l’exécution
Zone de
8 octets 40.0
réservée
par x
A RETENIR !
12
Squelette d'un programme
Résumé
13
La fonction main
EXIT_FAILURE = 1
La fonction main
La fonction main peut également posséder des paramètres formels.
En effet un programme C peut recevoir une liste d'arguments au
lancement de son exécution.
La ligne de commande est dans ce cas là est composée du nom du
fichier exécutable suivi par des paramètres.
main possède 2 paramètres formels appelés par convention :
int main (int argc, char *argv[]);
argc (argument count) : variable de type int fourni le nombre de mots
composant la ligne de commande y compris l'exécutable.
argv (argument vector) : est un tableau de chaînes de caractères
correspondant chacune à un mot de la ligne de commande.
argv[0] contient le nom du fichier exécutable
argv[1] contient le premier paramètre
…
Prof Asmaa El Hannani 2AP-S3 147
14
Exemple: fonction main
#include <stdio.h>
#include <stdlib.h>
15
La portée des variables
Exemple:
VARLIFE.C
Exemple
void affichetableau(float *tab, int Nb){
int i ;
for (i=0 ; i<Nb ; i++)
printf("valeur %d : %f \n", i, tab[i]);
16
Tableaux passés en paramètres à une
fonction
Tableaux à une dimension (un indice)
Type_ret Ident(Type_Tab *(Tab)[NCOL], int nLign, …);
OU
Type_ret Ident(Type_Tab Tab[][NCOL], int nLign, …);
Exemple
void affiche2D(float *tab[10], int NbLign){
int i,j ;
for (i=0 ; i<NbLign ; i++)
for (j=0 ; j<10 ; j++){
printf("%f ", tab[i]);
}
printf("\n");
}
}
Prof Asmaa El Hannani 2AP-S3 152
La Récursivité
//définition de la fonction
double Factorielle (int n)
{
if (n <= 0){
return 1;
}
return n*Factorielle (n-1);
}
17
Les fichiers en-tête
A.
18
Exercice: Qu’affichent les programmes suivants ?
B.
19
Partie 5
STRUCTURES ET FICHIERS
Structures
1
Types de variables personnalisés
De la fiche à la structure
2
La fiche d'un élève
Traduction Informatique
3
Structure
struct nom_struc
{
type_1 ident_champ1;
type_2 ident_champ2,ident_champ3;
type_3 ident_champ4;
};
4
Exemple 1 : Définition du type ETUDIANT
struct ETUDIANT
{
char Nom[80];
char Prenom[80];
char Adresse[200];
int Depart;
int Annee;
int Spec;
char Login[10];
char Passw[8];
char Email[30];
};
Cette déclaration définit un modèle de structure mais ne réserve pas de
variables correspondant à cette structure.
Ce modèle s’appelle ici ETUDIANT et il précise le nom et le type de
chacun des champs constituant la structure.
Prof Asmaa El Hannani 2AP-S3 195
Syntaxe
struct nom_struc nom_var;
Exemple
struct ETUDIANT UnEleve; //variable
struct ETUDIANT TabElev[250]; //tableau
struct ETUDIANT *pElev; //pointeur
5
Simplifier la déclaration de types: typedef
La déclaration typedef permet de définir ce que l’on nomme en
langage C des types synonymes.
A priori, elle s’applique à tous les types et pas seulement aux structures.
Typedef struct ETUDIANT Etudiant;
struct ETUDIANT
{ Le nom de ce nouveau
char Nom[80]; type est Etudiant
char Prenom[80];
.
.
. définition d'un type synonyme au type
char Email[30]; Struct ETUDIANT
};
Écrire le mot Etudiant est désormais équivalent à écrire
struct ETUDIANT lors de déclaration de variable:
Etudiant UnEleve; //variable
Etudiant TabElev[250]; //tableau
Etudiant *pElev; //pointeur
Prof Asmaa El Hannani 2AP-S3 197
6
Accès aux champs de la structure
Syntaxe :
Si variable de type structure non_struc:
nom_struc.nom_var
Exemple:
Etudiant UnEleve;
UnEleve.Annee = 2001;
Exemple:
Etudiant TabElev[250];
TabElev->Annee = 2001;
Exemple:
int main()
{ Déclarations des variables
Etudiant TabElev[250]; TabElev et UnEleve de
Etudiant UnEleve; type Etudiant
…
printf("\nNom de l'élève :");
scanf ("%s",UnEleve.Nom);
printf("\nAnnée de l'élève :");
Utilisation de ces
scanf ("%d",&UnEleve.Annee);
variables
…
TabElev[10] = UnEleve;
TabElev[10].Depart = 123
TabElev+10->Annee = 2017;
}
7
Initialisations de structures
Comme pour les variables, tableaux et pointeurs, il est vivement
conseillé d’initialiser les structures dès leur création.
struct Coordonnees
{
int x;
int y;
};
Il y a plusieurs façons d'initialiser une variable de type structure :
en initialisant les champs un à un :
struct Coordonnees UnPoint;
UnPoint.x = 0;
UnPoint.y = 0;
à la déclaration de la variable :
struct Coordonnees UnPoint = {0,0}
à la déclaration de la variable, en les nommant :
struct Coordonnees UnPoint = {.x=0, .y=0}
Prof Asmaa El Hannani 2AP-S3 201
8
Transmission d’une structure en argument d’une
fonction
Arguments et paramètres d'une fonction, sans la structure :
void NewElev(char pNom,char pPrenom,char pAdr,int
pDepart, int pAnnee,int pSpec,char lplogin,char
ppass,char pemail);
En utilisant la structure :
Transmission de la valeur d’une structure
Exemple complet
9
Fichiers
Le mode d'accès
Les attributs de protection
10
Gestion de Fichiers pour le programmeur
La direction du Flot
11
Ouverture/Fermeture de flots en C
12
Les Fonctions générales
13
Écriture dans un fichier
14
Lecture depuis un fichier
Lecture au format texte :
int fscanf(FILE *pfile,const char *format,…)
/* cette fonction lit la chaîne formatée dans le fichier.
Elle retourne le nombre de caractères luts, ou un nombre
<0 si erreur */
15
Exemple2: Lister le contenu d’un fichier quelconque
tel qu’il a pu être créé par Exemple1.
16
Exemple3: Enregistrer séquentiellement dans un
fichier texte une suite de nombres entiers saisis au clavier.
17
Détection de la fin d'un fichier
Lors de la fermeture d'un fichier ouvert en écriture, la fin du fichier
est marquée automatiquement par le symbole de fin de fichier EOF
(End Of File).
Lors de la lecture d'un fichier, la fonction int feof(FILE *stream)
nous permettent de détecter la fin du fichier. Elle retourne une
valeur différente de zéro, si la fin du fichier est atteinte; sinon la
valeur du résultat est zéro.
Une boucle de lecture typique pour lire un fichier référencé par un
pointeur FP peut avoir la forme suivante:
FP = fopen("C:\\AUTOEXEC.BAT", "r");
while(1){ Il faut indiquer le symbole '\' (back-slash)
fread(...) ; par '\\', pour qu'il ne soit pas confondu
if (feof(entree)) avec le début d'une séquence
break; d'échappement (p.ex: \n, \t, \a, ...).
...
}
Prof Asmaa El Hannani 2AP-S3 221
18
Les flots prédéfinis
Exemple
19
Exercice (solution file.c)
On veut réaliser un répertoire téléphonique. Chaque personne est représentée
dans le répertoire par un nom, prénom et le numéro de téléphone.
définir un type de structure Personne qui contient deux chaînes de caractères et un
entier.
écrire une fonction void ajout_personne (FILE *rep) qui saisit une personne et
l'ajoute à la fin du fichier passé en paramètre
écrire une fonction void affiche_ensemble_personne (FILE *rep) qui affiche le
contenu du fichier
écrire une fonction void trouve_numéro_personne (FILE *rep, char *nom) qui
permet de trouver le numéro de téléphone d’une personne donnée en paramètre
écrire une fonction void changer_numéro_personne (FILE *rep, char *nom) qui
permet de changer le numéro de téléphone d'une personne donnée en paramètre
écrire une fonction void menu(FILE *rep) qui demande l'opération à exécuter :
ajouter une personne, afficher le contenu du répertoire, trouver un numéro ou
quitter le programme
écrire le programme principal
Prof Asmaa El Hannani 2AP-S3 225
20