Remarques sur la gestion des espaces blancs

La gestion des espaces blancs est assez pénible. Il y a deux méthodes de consommation des espaces blancs du flot de données :
  1. le format contient une directive formée de caractères blancs. Si une telle directive ne peut consommer aucun caractère blanc, c'est un cas d'échec de la directive.

  2. le format contient une séquence d'échappement (autre que c, n, ou [) dont l'exécution commence par consommer d'éventuels caractères blancs dans le flot de données. Si il n'y a pas de caractères blancs à consommer, ce n'est pas une condition d'échec de la directive.

Voyons quelques conséquences.

Si le flot de données contient 23 45 on pourra les lire indifféremment soit :

-
par le format "%d %d" : la première directive %d consomme 23, la directive blanc (entre les deux %d) consomme les blancs entre 23 et 45, et la seconde directive %d essaye de consommer des blancs, échoue (mais ce n'est pas une erreur), puis consomme 45.

-
par le format "%d%d" : la première directive %d consomme 23, la seconde directive %d essaye de consommer des blancs, réussit, puis consomme 45.

Dans les deux cas, les valeurs affectées seront bien les mêmes : 23 et 45.

Un tel phénomène ne se manifeste pas avec les séquences d'échappement dont l'exécution ne commence pas par consommer les espaces blancs. Par exemple, si le flot de données contient 23 jean dupond, on n'obtiendra pas le même résultat selon que l'on utilise le format
"%d %[ abcdefghijklmnopqrstuvwxyz]" ou le format
"%d%[ abcdefghijklmnopqrstuvwxyz]" (sans blanc après %d). Le fscanf réussira dans les deux cas, mais dans le premier cas, la chaîne affectée au param$_i$ sera "jean dupond" et dans le second cas, ce sera " jean dupond".

Matthieu Moy 2017-02-08