sommaire du chapitre :
1. Écriture formatée de données
Introduction
La bibliothèque standard <stdio.h> contient un ensemble de fonctions
qui assurent la communication de la machine avec le monde extérieur.
Dans ce chapitre, nous allons en discuter les plus importantes :
printf() écriture formatée de données
scanf() lecture formatée de données
putchar() écriture d'un caractère
getchar() lecture d'un caractère
1. Ecriture 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).
Utilisation :
printf("<format>" , <Expression1> , <Expression2>
...)
La partie <format> peut contenir :
- du texte
- des séquences d'échappement
- des spécificateurs de format (indiquent la manière dont les valeurs
des expressions
Remarques :
Il doit toujours y avoir un spécifiacteur de format pour chaque expression,
il commencent toujours par % et se termine par un ou deux caractères
qui indiquent le format d'impression
Exemple :
int A = 1234;
int B = 567;
printf("%i fois %i est %li \n", A, B, (long)
A*B);
On a alors à l'écran:
1234 fois 567 est 699678
Les différents spécificateurs de format pour printf
%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
%f float rationnel
%e float rationnel représenté par sa forme : +/- <Mantisee>
* 10 ^ <Exposant>
Remarque : Pour pouvoir traiter correctement les arguments du type long, il faut utiliser les spécificateurs %ld, %li, %lu, %lo, %lx, %lf, %le.
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 : (_ représente un espace vide)
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
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
2. Lecture formatée de données
scanf()
La fonction scanf est la fonction symétrique à printf
; elle nous offre pratiquement les mêmes conversions que printf, mais
en sens inverse.
Cette fonction reçoit ses données à partir du fichier d'entrée standard stdin
(par défaut le clavier).
Utilisation :
scanf("
-
-<AdresseVariable1>, <AdresseVariable2>...: adresses des variables
auxquelles les données seront attribuées
-L'adresse d'une variable est indiquée par le nom de la variable précédé du
signe &.
Exemple :
int JOUR, MOIS, ANNEE;
scanf("%i %i %i", &JOUR, &MOIS, &ANNEE);
Les différents spécificateurs de format pour scanf
%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
%f float rationnel
%e float rationnel représenté par sa forme : +/- <Mantisee>
* 10 ^ <Exposant>
Indication de la largeur maximale
Pour tous les spécificateurs, nous pouvons indiquer la largeur
maximale du champ à évaluer pour une donnée.
Les chiffres qui passent au-delà du champ défini sont attribués à la prochaine
variable qui sera lue !
Exemple :
int A,B;
scanf("%4d %2d", &A, &B);
Si nous entrons le nombre 1234567, nous obtiendrons les affectations suivantes:
A=1234
B=56
le chiffre 7 sera gardé pour la prochaine instruction de lecture.
Nombre de valeurs lues
Lors de l'évaluation des données, scanf s'arrête si la chaîne de format a été travaillée jusqu'à la fin ou si une donnée ne correspond pas au format indiqué. scanf retourne comme résultat le nombre d'arguments correctement reçus et affectés.
Exemple :
int JOUR, MOIS, ANNEE, RECU;
RECU = scanf("%i %i %i", &JOUR, &MOIS, &ANNEE);
réagit de la façon suivante ( / représente uen valeur indéfinie) :
Introduit
|
RECU
|
JOUR
|
MOIS
|
ANNEE
|
12 4 1980 | 3 | 12 | 4 | 1980 |
12/4/1980 | 1 | 12 | / | / |
12.4 1980 | 1 | 12 | / | / |
12 4 19.80 | 3 | 12 | 4 | 19 |
putchar()
La commande, putchar("a"); transfère le caractère
a vers le fichier standard de sortie stdout. Les arguments de la fonction
putchar sont ou bien des caractères (des nombres entiers entre 0 et 255)
ou bien le symbole EOF (End Of File).
EOF est une constante définie dans
Exemple :
char A = 225;
char B = "\a";
int C = "\a";
putchar("x"); /* afficher la lettre x */
putchar("?"); /* afficher le symbole ? */
putchar("\n"); /* retour à la ligne */
putchar(65); /* afficher le symbole avec le code 65 (ASCII: "A")
*/
putchar(A); /* afficher la lettre avec le code 225 (ASCII: "ß")
*/
putchar(B); /* beep sonore */
putchar(C); /* beep sonore */
putchar(EOF); /* marquer la fin du fichier */
Une fonction plus souvent utilisée que putchar est la fonction getchar, qui lit le prochain caractère du fichier d'entrée standard stdin.
Type du résultat
Les valeurs retournées par getchar sont ou bien des caractères
(0 - 255) ou bien le symbole EOF.
Comme la valeur du symbole EOF sort du domaine des caractères, le type
résultat de getchar est int. En général, getchar est utilisé
dans une affectation:
int C;
C = getchar();