La reponse est dans ce bouquin (tu le trouvera sur developpez.com)
Universite de la Mediterranee Faculte des Sciences de Luminy
Le langage C
Henri Garreta
Un petit extrait :
7.2.4 A propos de la fonction scanf et des lectures interactives
A propos de
sauter les blancs . Nous avons dit que les sp´ecifications qui constituent le format
peuvent ˆetre s´epar´ees entre elles par un ou plusieurs blancs, ce qui indique que les donn´ees `a lire correspondantes
peuvent
alors ˆetre s´epar´ees par un nombre quelconque de blancs.
Pour la fonction
scanf, les blancs dans le format se traduisent donc par l’ordre `a pr´esent, sautez tous
les caract`eres blancs qui se pr´esentent
. Or la seule mani`ere pour l’ordinateur de s’assurer qu’il a bien saut´e
tous les caract`eres blancs consiste `a lire (sans le consommer) le premier caract`ere non blanc qui les suit. Si la
lecture se fait dans un fichier, cela ne pose pas de probl`eme, les caract`eres `a lire existant tous d`es le d´epart.
Mais cela peut cr´eer des situations confuses dans le cas d’une lecture interactive mettant en oeuvre le clavier et
un op´erateur
vivant. Exemple :
int x, y = 33;
...
printf("donne x : ");
scanf(" %d ", &x); /* aije... */
printf("donne y : ");
scanf("%d", &y);
printf("x = %d, y = %d\n", x, y);
Parce qu’on a ´ecrit, peut-ˆetre sans faire attention, des blancs
apr`es le format %d, le premier appel de scanf
ci-dessus signifie
lisez un entier et tous les blancs qui le suivent . L’op´erateur constatera avec ´etonnement que
pour que son premier nombre sont pris en compte il est oblig´e de composer le deuxi`eme ! Exemple de dialogue
(le signe
{ repr´esentant la frappe de la touche Entr´ee ) :
donne x : 11
{
{{
la machine ne r´eagit pas... ! ?
22
{ donne y : x = 11, y = 22
Notez que faire suivre le premier nombre d’un caract`ere non blanc conventionnel n’est pas une bonne solution
car, ce caract`ere n’´etant pas consomm´e, il fait ´echouer la lecture du second nombre :
donne x : 11
{ donne y : x = 11, y = 33
Le¸con `a retenir : dans le format de
scanf, les blancs ne sont pas de la d´ecoration, ils jouent un rˆole bien
pr´ecis.