0% ont trouvé ce document utile (0 vote)
47 vues20 pages

Programmation en C : Lecture et Écriture

Le document décrit les fonctions printf et scanf en C pour l'écriture et la lecture formatée de données. Il explique les codes de format utilisés et les options pour contrôler le format d'affichage.

Transféré par

x
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
47 vues20 pages

Programmation en C : Lecture et Écriture

Le document décrit les fonctions printf et scanf en C pour l'écriture et la lecture formatée de données. Il explique les codes de format utilisés et les options pour contrôler le format d'affichage.

Transféré par

x
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

2ème Année «Années

LE LANGAGE C Préparatoires Intégrés»


2019/2020

Pf. Adil CHERGUI


LA LECTURE ET ÉCRITURE
Séance 1
LES INSTRUCTIONS DE CONTRÔLE
Objectifs de la séance :
• Communiquer avec les fonctions de lecture et d’écritures.
• Exprimer les structures de contrôle en langage C

Pf. Adil CHERGUI


ÉCRITURE FORMATÉE DE DONNÉES
Les possibilités de la fonction printf
La fonction printf est utilisée pour transférer Exemple:
du texte, des valeurs de variables ou des
résultats d'expressions vers le fichier de printf("leur somme est : %d",n1+n2);
sortie standard stdout (par défaut l'écran).
La fonction printf a comme 1er argument une
chaîne de caractères qui spécifie:

• Des caractères à afficher tels quels;

• Des code de format repérés par %. Un


code de conversion (c, d, f..) précise le
type de l’information à afficher.

Un code de format peut contenir des


informations complémentaires agissant sur le
cadrage, le gabarit ou la précision.
PROGRAMMATION 3
EN LANGAGE C
ÉCRITURE FORMATÉE DE DONNÉES
Les principaux codes de conversion

• c : char: caractère affiché ''en clair" • f : double ou float écrit en notation "décimale" avec six
(convient aussi à short ou à int compte chiffres après le point
tenu des conversions systématiques)
• e : double ou float écrit en notation ‘'exponentielle''
• d : int (convient aussi à char, compte tenu (mantisse entre 1 et 9) avec six chiffres après le point
des conversions systématiques) décimal, sous la forme x.xxxxxxe+yyy ou x.xxxxxxe-yyy
• u : unsigned int (convient aussi à unsigned pour les nombres positifs et -x.xxxxxxe+yyy ou -
char ou à unsigned short, compte tenu x.xxxxxxe-yyy pour les nombres négatifs
des conversions systématiques) • s : chaîne de caractères dont on fournit l'adresse (notion
• ld : long qui sera étudiée ultérieurement)
• lu : unsigned long

PROGRAMMATION 4
EN LANGAGE C
ÉCRITURE FORMATÉE DE DONNÉES
Action sur le gabarit d’affichage
Les entiers sont affichés par défaut sans printf("%f" , x );
espaces avant ou après. Les flottants avec six x = 1.2345 1.234500
chiffres après le point. x = 12.3456789 12.345678
Pour agir sur l’affichage ➔ un nombre est printf("%10f" , x );
placé après % et précise le nombre de
caractère minimum à utiliser. x = 1.2345 ^^1.234500

Exemples x = 1.2345E5 123450.000000


printf("%e" , x );
printf("%3d" , n );
x = 1.2345 1.234500e+000
n = 20 ^20
x = 123.45 1.234500e+002
n=3 ^^3
n = 2358 2358
n = -5200 -5200
PROGRAMMATION 5
EN LANGAGE C
ÉCRITURE FORMATÉE DE DONNÉES
Actions sur la précision
pour les flottants, on peut préciser un nombre - Le caractère * figurants à la place d’un gabarit ou une
de chiffres après le point décimal précision signifie que la valeur effective est fournie dans la
liste des arguments de printf:
Exemples:
printf("%8.*f" , n, x );
printf("%10.3f" , x );
n=1; x=1.2345 ➔ ^^^^^1.2
x = 1.2345 ^^^^^1.235
- La fonction printf fournit une valeur de retour (nombre de
x = 1.2345E3 ^^1234.500
caractère affichés)
x = 1.2345E7 12345000.000

Remarques:
Cadrage de l’affichage à gauche ➔
printf("%-10.3f" , x );
x = 1.2345 ➔ 1.235^^^^^

PROGRAMMATION 6
EN LANGAGE C
ÉCRITURE FORMATÉE DE DONNÉES
Les erreurs d’affichage
Erreur 1 : Code de format en désaccord avec le Conséquence 2 : s’il y a trop de code de format, printf
type de l’expression à afficher: cherchera à afficher n’importe quoi :
Conséquence : mauvaise interprétation si printf("%d %d" , n );
même taille (int en %u), sinon, conséquences n=8 ➔ 8 2
plus désastreuses.
Erreur 2: Nombre de code de format différents
du nombre d’expressions de la liste
Conséquence 1 : si des expressions de la liste
n’ont pas de format, elles ne seront pas
affichées :
printf("%d" , n, p );
// valeur de p ne sera pas
affiché

PROGRAMMATION 7
EN LANGAGE C
LECTURE FORMATÉE DE DONNÉES
Les principaux codes de conversion Premières notion de tampon et de
séparateurs
• c : char Lorsque scanf attend des données, l’information
frappée au clavier est rangée temporairement dans
• d : int l’emplacement mémoire nommé « tampon ». Ce
• u : unsigned int dernier est exploré caractère par caractère au fur et
à mesure des besoins. Certains caractères jouent un
• hd : short int
rôle particulier: les séparateurs (l’espace et la fin de
• hu : unsigned short ligne \n)
• 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) PROGRAMMATION 8
EN LANGAGE C
LECTURE FORMATÉE DE DONNÉES
Les premières règles utilisées Premières notion de tampon et de
par scanf séparateurs
• Les codes de format correspondant à un Exemples : (n et p sont de type int, c char, @
nombre entraînent l’avancement du désigne une fin de ligne)
pointeur jusqu’au 1er caractère différent scanf("%d%d" , &n, &p );
d’un séparateur, puis scanf prend en
compte tous les caractères suivants jusqu’à 12^25@ n = 12 p=25
la rencontre d’un séparateur. ^12^^25^^@ n = 12 p=25
• Quand au code de format %c, il entraîne la 123@
prise en compte du caractère désigné par le
pointeur (même un séparateur) et il est @
avancé sur le caractère suivant. ^25 n = 12 p=25
scanf("%d%c" , &n, &c );
12^a@ n = 12 c=‘ ‘

PROGRAMMATION 9
EN LANGAGE C
LECTURE FORMATÉE DE DONNÉES
On peut imposer un gabarit
Rôle d’un espace dans le format
maximal
Le traitement d’un code de format Un espace entre deux codes de format demande à
s’interrompe soit à la rencontre d’un scanf de faire avancer le pointeur au prochain
séparateur, soit lorsque le nombre de caractère caractère différent d’un séparateur !!
indiqué a été atteint !!
Exemples : (n et p sont de type int, @ désigne Exemples : (n et p sont de type int, c char, @
une fin de ligne) désigne une fin de ligne)

scanf("%3d%3d" , &n, &p ); scanf("%d %c" , &n, &c );


12^25@ n = 12 p=25 12^a@ n = 12 c=‘a‘
^^^^^12345@ n = 123 p=45 12^^^@
12@ a@ n = 12 c=‘a‘
25@ n = 12 p=25

PROGRAMMATION 10
EN LANGAGE C
LECTURE FORMATÉE DE DONNÉES
Arrêt prématuré de scanf
Compte = scanf("%d %d %c" , &n, &p, &c );
12^25^b@ n = 12 p = 25 c=‘b‘ compte = 3
12b@ n = 12 p inchangé c inchangé compte = 1
b@ n indéfini p inchangé c inchangé compte = 0
Un arrêt prématuré de scanf a lieu dans le cas où scanf n’est pas en mesure de fabriquer une valeur adéquate !!

Erreurs de programmation
1- Code de format en désaccord avec le type de l’expression:
Si même taille → introduction d’une mauvaise valeur
Si la variable a une taille inférieur → écrasement d’un emplacement mémoire consécutif à cette variable
2- Nombre de codes de format différent du nombre d’éléments de la liste:
Scanf("%d",&n, &p); → seule la valeur de n est lue
Scanf("%d%d",&n); → on affecte une valeur à un emplacement aléatoire de la mémoire
PROGRAMMATION 11
EN LANGAGE C
LES INSTRUCTIONS DE CONTRÔLE
Structures conditionnelles (if)

Il n’y a que deux formes possibles pour un test ;


▪ if ([condition])
{ Les instructions qui sont dans ce
[bloc d’instructions] bloc
ne seront exécutées que si la condition
}
et Vrai
▪ if ([condition])
{
[bloc d’instructions 1] Si la condition est vrai
} Le bloc 1 d’instructions est exécuté
else Si la condition est fausse
Le bloc 2 est exécuté
{
[bloc d’instructions 2]
}

PROGRAMMATION 12
EN LANGAGE C
LES INSTRUCTIONS DE CONTRÔLE
Structures conditionnelles (if)

Exemple

char Let;
printf("donner une lettre en Minuscule\n");
Les lettres minuscules ont une valeur
scanf("%c", &Let);
comprise entre 97 (a) et 122 (z).
if (Let <96)
Regarder la table des codes ASCII
{
Let=Let+32;
printf("vous avez tapez une lettre en Majuscule\n"); Ces instructions (entre
printf("Mais ne vous inquiete pas \n"); accolades) s’exécutent si la
printf("nous l’avons rendu Minuscule\n"); condition et vrai
}
printf("ce message s’affiche a l’exterieur de la structure de
test"); Le programme
continue son exécution

PROGRAMMATION 13
EN LANGAGE C
LES INSTRUCTIONS DE CONTRÔLE
Structures conditionnelles (if)

Exemple

int n,m; Si la condition n’agit que sur une seul
printf("donner un nombre entier\n"); instruction, il n’est pas nécessaire de
scanf("%d", &n); mettre les accolades
if (n % 2 == 0)
printf("le nombre %d est paire\n", n);
else
printf("le nombre %d est impaire\n",n);
m = n + 6;
printf("le nombre m =%d\n", m); Ces instructions n’appartiennent pas
… ni au bloc de if ni celui de else
Ici le programme continu ces
instructions

PROGRAMMATION 14
EN LANGAGE C
LES INSTRUCTIONS DE CONTRÔLE
L’instruction de choix multiple (switch) Exemple :
#include <stdio.h>
int main()
Syntaxe : {
switch(choix) int i,j,k;
printf("entrez deux nombres entiers \n");
{
scanf("%d %d",&i,&j);
case [valeur1] : printf("entrez 0 pour avoir un quotient entier\n");
[bloc d’instructions 1] printf("ou 1 pour avoir un quotient
break; fractionnaire\n");
case [valeur2] : scanf("%d",&k);
[bloc d’instructions 2] switch(k)
break; {
case 0 :
…. printf("%d\n",i/j);
case [valeur n] : break;
[bloc d’instructions n] case 1 :
break; printf("%f\n",(float)i/j);
default : break;
[bloc d’instructions a exécuté lorsque la default :
valeur de choix ne correspond a aucun cas ] printf("il faut entrer 0 ou 1\n");
printf("relancez l'execution\n");
break; }
} return 0;
} PROGRAMMATION 15
EN LANGAGE C
LES INSTRUCTIONS DE CONTRÔLE
L’instruction de répétition (la boucle for) Syntaxe :

L'instruction for permet d'exécuter plusieurs fois la for ([initialisation du compteur]; [condition];
même série d'instructions (Bloc d’instructions): [modification du compteur])
{
c'est une boucle !
[Bloc d’instructions];
Dans sa syntaxe, il suffit de préciser le nom de la }
variable qui sert de compteur (et éventuellement sa
valeur de départ, la condition sur la variable pour Exemple :
laquelle la boucle s'arrête (basiquement une for (i=1; i<6; i++)
condition qui teste si la valeur du compteur dépasse {
printf("%d", i);
une limite) et enfin une instruction qui incrémente }
(ou décrémente) le compteur.

PROGRAMMATION 16
EN LANGAGE C
LES INSTRUCTIONS DE CONTRÔLE
L’instruction de répétition (while) Syntaxe :
L'instruction while représente un autre moyen
while ([condition])
d'exécuter plusieurs fois la même série
d'instructions. {
[Bloc d’instructions];
Avec cette structure de contrôle, tant qu'une
}
condition est vraie, les instructions lui
correspondant sont exécutées.
Exemple :
x=1;
while (x<=10)
{
a = 1/(x-20);
printf("%f", a);
x=x+1;
}

PROGRAMMATION 17
EN LANGAGE C
LES INSTRUCTIONS DE CONTRÔLE
L’instruction de répétition (do…while) Syntaxe :
C’est une seconde version de la boucle while que
do
l’on appelle do…while. La différence réside dans
l’ordre d’évaluation de la condition, ici le bloc {
d’instructions est exécuté premièrement puis la [Bloc d’instructions];
condition est évaluée. } while ([condition]);

Exemple :
x=1;
do
{
a = 1/(x-20);
printf("%f", a);
x=x+1;
} while (x<=10);

PROGRAMMATION 18
EN LANGAGE C
LES INSTRUCTIONS DE CONTRÔLE
Exemple break :
Les instructions de branchement int main()
inconditionnel : break, continue {
int i;
for ( i=1 ; i<=5 ; i++ )
{ printf ("iteration %d\n", i);
printf ("bonjour\n");
Les instructions break et continue fournissent if ( i==3 )
une plus grande maîtrise de l’exécution d’une break;
boucle dans un code en C. Chaque fois que printf ("fin tour %d\n", i);
}
l’instruction break est rencontrée, le contrôle printf ("après la boucle");
d’exécution saute immédiatement à la première return 0;
instruction après la boucle. Pour passer le contrôle }
à l’itération suivante sans sortir de la boucle, nous
utilisons l’instruction continue. Les deux
instructions continue et breakpeuvent être
utilisées dans les boucles tant que et pour.

PROGRAMMATION 19
EN LANGAGE C
LES INSTRUCTIONS DE CONTRÔLE
Exemple continue:
Les instructions de branchement int main()
inconditionnel : break, continue {
int i ;
for ( i=1 ; i<=5 ; i++ )
{
Les instructions break et continue fournissent printf ("début tour %d\n", i) ;
une plus grande maîtrise de l’exécution d’une if (i<4) continue ;
boucle dans un code en C. Chaque fois que printf ("bonjour\n") ;
}
l’instruction break est rencontrée, le contrôle
return 0;
d’exécution saute immédiatement à la première }
instruction après la boucle. Pour passer le contrôle
à l’itération suivante sans sortir de la boucle, nous
utilisons l’instruction continue. Les deux
instructions continue et breakpeuvent être
utilisées dans les boucles tant que et pour.

PROGRAMMATION 20
EN LANGAGE C

Vous aimerez peut-être aussi