Gestion des entrées/sorties


sommaire du chapitre :

Introduction

1. Écriture formatée de données

2. Lecture formatée de données

3. Écriture d'un caractère

4. Lecture d'un caractère


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

retour au sommaire


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 sont imprimées)

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

retour au sommaire


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("<Format>", <AdresseVariable1>, <AdresseVariable2>...)

-<Format> : format de lecture des données
-<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

retour au sommaire


3. Écriture d'un caractère

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 qui marque la fin d'un fichier. La commande putchar(EOF); est utilisée dans le cas où stdout est dévié vers un fichier.

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 */

retour au sommaire


4. Lecture d'un caractère

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();

retour au sommaire
chapitre suivant