Programmer en langage C
58
© Éditions Eyrolles
n’est précisé (comme nous apprendrons à le faire dans le paragraphe 2.4) et qu’aucun caractère invalide n’est présent dans la donnée (nous y reviendrons au paragraphe 2.6).
Quant au code de format %c, il entraîne la prise en compte du caractère désigné par le pointeur
(même s’il s’agit d’un séparateur comme espace ou fin de ligne), et le pointeur est simplement
avancé sur le caractère suivant du tampon.
Voici quelques exemples dans lesquels nous supposons que n et p sont de type int, tandis que
c est de type char. Nous fournissons, pour chaque appel de scanf, des exemples de réponses
possibles (^ désigne un espace et @ une fin de ligne) et, en regard, les valeurs effectivement lues.
scanf ("%d%d", &n, &p) ;
12^25@
n = 12
p = 25
^12^^25^^@
n = 12
p = 25
12@
@
^25@
n = 12
p = 25
scanf ("%c%d", &c, &n) ;
a25@
c = 'a'
n = 25
a^^25@
c = 'a'
n = 25
scanf ("%d%c", &n, &c) ;
12 a@
n = 12
c = ' '
Notez que, dans ce cas, on obtient bien le caractère « espace » dans c. Nous verrons dans le
paragraphe 2.5 comment imposer à scanf de sauter quand même les espaces dans ce cas.
Le code de format précise la nature du travail à effectuer pour transcoder une partie de l’information frappée au clavier, laquelle n’est en fait qu’une suite de caractères (codés chacun sur
un octet) pour fabriquer la valeur (binaire) de la variable correspondante. Par exemple, %d
entraîne en quelque sorte une double conversion : suite de caractères -> nombre écrit en décimal -> nombre codé en binaire ; la première conversion revient à faire correspondre un nombre
entre 0 et 9 à un caractère représentant un chiffre. En revanche, le code %c demande simplement de ne rien faire puisqu’il suffit de recopier tel quel l’octet contenant le caractère concerné.
2.4 Imposition d’un gabarit maximal
Comme dans les codes de format de printf, on peut, dans un code de format de scanf,
préciser un gabarit. Dans ce cas, le traitement d’un code de format s’interrompt soit à la rencontre d’un séparateur, soit lorsque le nombre de caractères indiqués a été atteint (attention, les
séparateurs éventuellement sautés auparavant ne sont pas comptabilisés !).
Delannoy Livre.book Page 58 Mercredi, 6. mai 2009 4:26 16
58
© Éditions Eyrolles
n’est précisé (comme nous apprendrons à le faire dans le paragraphe 2.4) et qu’aucun caractère invalide n’est présent dans la donnée (nous y reviendrons au paragraphe 2.6).
Quant au code de format %c, il entraîne la prise en compte du caractère désigné par le pointeur
(même s’il s’agit d’un séparateur comme espace ou fin de ligne), et le pointeur est simplement
avancé sur le caractère suivant du tampon.
Voici quelques exemples dans lesquels nous supposons que n et p sont de type int, tandis que
c est de type char. Nous fournissons, pour chaque appel de scanf, des exemples de réponses
possibles (^ désigne un espace et @ une fin de ligne) et, en regard, les valeurs effectivement lues.
scanf ("%d%d", &n, &p) ;
12^25@
n = 12
p = 25
^12^^25^^@
n = 12
p = 25
12@
@
^25@
n = 12
p = 25
scanf ("%c%d", &c, &n) ;
a25@
c = 'a'
n = 25
a^^25@
c = 'a'
n = 25
scanf ("%d%c", &n, &c) ;
12 a@
n = 12
c = ' '
Notez que, dans ce cas, on obtient bien le caractère « espace » dans c. Nous verrons dans le
paragraphe 2.5 comment imposer à scanf de sauter quand même les espaces dans ce cas.
Le code de format précise la nature du travail à effectuer pour transcoder une partie de l’information frappée au clavier, laquelle n’est en fait qu’une suite de caractères (codés chacun sur
un octet) pour fabriquer la valeur (binaire) de la variable correspondante. Par exemple, %d
entraîne en quelque sorte une double conversion : suite de caractères -> nombre écrit en décimal -> nombre codé en binaire ; la première conversion revient à faire correspondre un nombre
entre 0 et 9 à un caractère représentant un chiffre. En revanche, le code %c demande simplement de ne rien faire puisqu’il suffit de recopier tel quel l’octet contenant le caractère concerné.
2.4 Imposition d’un gabarit maximal
Comme dans les codes de format de printf, on peut, dans un code de format de scanf,
préciser un gabarit. Dans ce cas, le traitement d’un code de format s’interrompt soit à la rencontre d’un séparateur, soit lorsque le nombre de caractères indiqués a été atteint (attention, les
séparateurs éventuellement sautés auparavant ne sont pas comptabilisés !).
Delannoy Livre.book Page 58 Mercredi, 6. mai 2009 4:26 16
