Previous Next Up Index Contents

4.1. Écriture formatée de données


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 699678
Les 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*B sera 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.

Attention!

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


Exercice 4.1

#include <stdio.h>
main()
{
   int N=10, P=5, Q=10, R;
   char C='S';

   N = 5; P = 2;
   Q = N++ > P || P++ != 3;
   printf ("C : N=%d P=%d Q=%d\n", N, P, Q);

   N = 5; P = 2;
   Q = N++ < P || P++ != 3;
   printf ("D : N=%d P=%d Q=%d\n", N, P, Q);

   N = 5; P = 2;
   Q = ++N == 3 && ++P == 3;
   printf ("E : N=%d P=%d Q=%d\n", N, P, Q);

   N=5; P=2;
   Q = ++N == 6 && ++P == 3;
   printf ("F : N=%d P=%d Q=%d\n", N, P, Q);

   N=C;
   printf ("G : %c %c\n", C, N);
   printf ("H : %d %d\n", C, N);
   printf ("I : %x %x\n", C, N);
   return 0;
}
a) Sans utiliser l'ordinateur, trouvez et notez les résultats du programme ci-dessus.

b) Vérifiez vos résultats à l'aide de l'ordinateur.


Previous Next Up Index Contents


Feedback - Copyright © 1993,1996,1997 F.Faber