© Éditions Eyrolles
59
chapitre n° 4
Les entrées-sorties conversationnelles
Voici un exemple :
scanf ("%3d%3d", &n, &p)
12^25@
n = 12
p = 25
^^^^^12345@
n = 123 p = 45
12@
25@
n = 12
p = 25
2.5 Rôle d’un espace dans le format
Un espace entre deux codes de format demande à scanf de faire avancer le pointeur au prochain caractère différent d’un séparateur. Notez que c’est déjà ce qui se passe lorsque l’on a
affaire à un code de format correspondant à un type numérique. En revanche, cela n’était pas
le cas pour les caractères, comme nous l’avons vu au paragraphe 2.3.
Voici un exemple :
scanf ("%d^%c", &n, &c) ;
/* ^ désigne un espace
*/
/* %d^%c est différent de %d%c */
12^a@
n = 12
c = 'a'
12^^^a@
n = 12
c = 'a'
12@a@
n = 12
c = 'a'
2.6 Cas où un caractère invalide apparaît dans une donnée
Voyez cet exemple, accompagné des valeurs obtenues dans les variables concernées :
scanf ("%d^%c", &n, &c) ;
/* ^ désigne un espace */
12a@
n = 12
c = 'a'
Ce cas fait intervenir un mécanisme que nous n’avons pas encore rencontré. Il s’agit d’un troisième critère d’arrêt du traitement d’un code format (les deux premiers étaient : rencontre
d’un séparateur ou gabarit atteint).
Ici, lors du traitement du code %d, scanf rencontre les caractères 1, puis 2, puis a. Ce caractère
a ne convenant pas à la fabrication d’une valeur entière, scanf interrompt son exploration et
fournit donc la valeur 12 pour n. L’espace qui suit %d dans le format n’a aucun effet puisque le
caractère courant est le caractère a (différent d’un séparateur). Le traitement du code suivant,
c’est-à-dire %c, amène scanf à prendre ce caractère courant (a) et à l’affecter à la variable c.
D’une manière générale, dans le traitement d’un code de format, scanf arrête son exploration
du tampon dès que l’une des trois conditions est satisfaite :
●
rencontre d’un caractère séparateur,
Delannoy Livre.book Page 59 Mercredi, 6. mai 2009 4:26 16
Précédent

- 72/281

Suivant