printf()
La fonction printf est utilisée pour transférer du texte, des valeurs de variables ou des résultats d'expressions vers le fichier de sortie standard stdout (par défaut l'écran).
Ecriture formatée en langage algorithmiqueécrire <Expression1>,<Expression2>, ...Ecriture formatée en C
printf("<format>",<Expr1>,<Expr2>, ... )
"<format>" |
: |
format de représentation |
|
<Expr1>,... |
: |
variables et expressions dont les valeurs sont à représenter |
La partie "<format>" est en fait une chaîne de caractères qui peut contenir:
* du texte
* des séquences d'échappement
* des spécificateurs de format
* Les spécificateurs de format indiquent la manière dont les valeurs des expressions <Expr1..N> sont imprimées.
* La partie "<format>" contient exactement un spécificateur de format pour chaque expression <Expr1..N>.
* Les spécificateurs de format commencent toujours par le symbole % et se terminent par un ou deux caractères qui indiquent le format d'impression.
* Les spécificateurs de format impliquent une conversion d'un nombre en chaîne de caractères. Ils sont encore appelés symboles de conversion.
Exemple 1
La suite d'instructions:
int A = 1234; int B = 567; printf("%i fois %i est %li\n", A, B, (long)A*B);va afficher sur l'écran:
1234 fois 567 est 699678Les arguments de printf sont
- |
la partie format |
"%i fois %i est %li" |
|
- |
la variable |
A |
|
- |
la variable |
B |
|
- |
l'expression |
(long)A*B |
Le 1er |
spécificateur(%i) indique que la valeur de A |
|
sera imprimée comme entier relatif |
==>1234 |
|
Le 2e |
spécificateur(%i) indique que la valeur de B |
|
sera imprimée comme entier relatif |
==>567 |
|
Le 3e |
spécificateur(%li) indique que la valeur de (long)A*Bsera imprimée comme entier relatif long |
==>699678 |
Exemple 2
La suite d'instructions:
char B = 'A'; printf("Le caractère %c a le code %i !\n", B, B);va afficher sur l'écran:
Le caractère A a le code 65 !La valeur de B est donc affichée sous deux formats différents:
%c |
comme caractère: |
A |
|
%i |
comme entier relatif: |
65 |
Spécificateurs de format pour printf
SYMBOLE |
TYPE |
IMPRESSION COMME |
%d ou %i |
int |
entier relatif |
%u |
int |
entier naturel (unsigned) |
%o |
int |
entier exprimé en octal |
%x |
int |
entier exprimé en hexadécimal |
%c |
int |
caractère |
%f |
double |
rationnel en notation décimale |
%e |
double |
rationnel en notation scientifique |
%s |
char* |
chaîne de caractères |
1. Arguments du type long
Les spécificateurs %d, %i, %u, %o, %x peuvent seulement représenter des valeurs du type int ou unsigned int. Une valeur trop grande pour être codée dans deux octets est coupée sans avertissement si nous utilisons %d.
Pour pouvoir traiter correctement les arguments du type long, il faut utiliser les spécificateurs %ld, %li, %lu, %lo, %lx.
Exemple
long N = 1500000; |
|
printf("%ld, %lx", N, N); |
==> 1500000, 16e360 |
printf("%x, %x" , N); |
==> e360, 16 |
printf("%d, %d" , N); |
==> -7328, 22 |
2. Arguments rationnels
Les spécificateurs %f et %e peuvent être utilisés pour représenter des arguments du type float ou double. La mantisse des nombres représentés par %e contient exactement un chiffre (non nul) devant le point décimal. Cette représentation s'appelle la notation scientifique des rationnels.
Pour pouvoir traiter correctement les arguments du type long double, il faut utiliser les spécificateurs %Lf et %Le.
Exemple
float N = 12.1234; |
|
double M = 12.123456789; |
|
long double P = 15.5; |
|
printf("%f", N); |
==> 12.123400 |
printf("%f", M); |
==> 12.123457 |
printf("%e", N); |
==> 1.212340e+01 |
printf("%e", M); |
==> 1.212346e+01 |
printf("%Le", P); |
==> 1.550000e+01 |
3. Largeur minimale pour les entiers
Pour les entiers, nous pouvons indiquer la largeur minimale de la valeur à afficher. Dans le champ ainsi réservé, les nombres sont justifiés à droite.
Exemples
( _ <=> position libre)
printf("%4d", 123); |
==> |
_123 |
printf("%4d", 1234); |
==> |
1234 |
printf("%4d", 12345); |
==> |
12345 |
printf("%4u", 0); |
==> |
___0 |
printf("%4X", 123); |
==> |
__7B |
printf("%4x", 123); |
==> |
__7b |
Largeur minimale et précision pour les rationnels
4. Pour les rationnels, nous pouvons indiquer la largeur minimale de la valeur à afficher et la précision du nombre à afficher. La précision par défaut est fixée à six décimales. Les positions décimales sont arrondies à la valeur la plus proche.
Exemples
printf("%f", 100.123); |
==> |
100.123000 |
printf("%12f", 100.123); |
==> |
__100.123000 |
printf("%.2f", 100.123); |
==> |
100.12 |
printf("%5.0f", 100.123); |
==> |
__100 |
printf("%10.3f", 100.123); |
==> |
___100.123 |
printf("%.4f", 1.23456); |
==> |
1.2346 |