Champs de spécification de format : scanf et wscanf fonctions

Les informations ici s’appliquent à l’ensemble scanf de la famille de fonctions, y compris les versions sécurisées. Il décrit les symboles utilisés pour indiquer scanf aux fonctions comment analyser le flux d’entrée, tel que le flux stdind’entrée, dans des valeurs insérées dans des variables de programme.

L’argument format est une chaîne qui spécifie l’interprétation de l’entrée et peut contenir un ou plusieurs des éléments suivants :

  • Espaces blancs : vide ( ) ; tabulation (\t) ; ou nouvelle ligne (\n). Un espace blanc oblige scanf à lire, mais pas à stocker, tous les espaces blancs consécutifs dans l’entrée jusqu’au caractère suivant autre qu’un espace blanc. Un espace blanc au format correspond à tout nombre (y compris 0) et à toute combinaison d'espaces blancs dans l'entrée.

  • Caractères autres que des espaces blancs, sauf le symbole de pourcentage (%). Un caractère autre qu’un espace blanc oblige scanf à lire, mais pas à stocker, un caractère correspondant autre qu’un espace blanc. Si le caractère suivant dans le flux d’entrée ne correspond pas, scanf se termine.

  • Spécifications de format, introduites par le symbole de pourcentage (%). Une spécification de format entraîne scanf la lecture et la conversion de caractères dans l’entrée en valeur d’un type spécifié. La valeur est affectée à un argument dans la liste d'arguments.

    Une spécification de format se présente sous la forme suivante :

    %[*][][width{hll||Ll|I64|}]type

    Ici, , widthllhl, , I64et L représentent une scanf spécification de largeur, et type représente un scanf caractère de champ de type.

La format chaîne d’argument est lue de gauche à droite. Les caractères en dehors des spécifications de format sont censés correspondre à la séquence de caractères dans le flux d’entrée. Les caractères correspondants dans le flux d’entrée sont analysés, mais pas stockés. Si un caractère dans le flux d’entrée est en conflit avec la spécification de format, scanf se termine et que le caractère est laissé dans le flux d’entrée comme s’il n’avait pas été lu.

Lorsque la première spécification de format est rencontrée, la valeur du premier champ d’entrée est convertie en fonction de cette spécification. Cette valeur est stockée à l’emplacement spécifié par le premier argument qui suit l’argument format . La deuxième spécification de format entraîne la conversion et le stockage du deuxième champ d’entrée dans l’argument suivant, et ainsi de suite, à la fin de la chaîne de format.

Un champ d’entrée est défini comme suit : Tous les caractères jusqu’au premier caractère d’espace blanc (espace, onglet ou nouvelle ligne) ou jusqu’au premier caractère qui ne peut pas être converti en fonction de la spécification de format, ou jusqu’à ce que la largeur du champ (si spécifiée) soit atteinte. S'il y a trop d'arguments pour les spécifications données, les arguments supplémentaires sont évalués mais ignorés. Les résultats sont imprévisibles s’il n’y a pas suffisamment d’arguments pour la spécification de format.

Chaque champ de la spécification de format est un caractère unique ou un nombre indiquant une option de mise en forme spécifique. Le caractère type, qui apparaît après le dernier champ de format facultatif, détermine si le champ d'entrée est interprété comme un caractère, une chaîne ou un nombre.

La spécification de format la plus simple contient uniquement le symbole de pourcentage et un caractère type (par exemple, %s). Si un signe de pourcentage (%) est suivi d’un caractère qui n’a aucune signification comme caractère de contrôle de format, ce caractère et les caractères suivants (jusqu’au signe de pourcentage suivant) sont traités comme une séquence ordinaire de caractères. Autrement dit, ils sont traités comme une séquence de caractères qui doivent correspondre à l’entrée. Par exemple, pour spécifier qu'un symbole de pourcentage doit être inséré, utilisez %%.

Un astérisque (*) suivant du symbole de pourcentage supprime l'attribution du champ d'entrée suivant, qui est interprété comme un champ du type spécifié. Le champ est analysé, mais pas stocké dans un argument.

Les versions sécurisées (celles avec le _s suffixe) de la scanf famille de fonctions nécessitent chaque paramètre de type c, C, sS ou [ pour avoir un paramètre de taille de mémoire tampon passé immédiatement après. Pour plus d’informations sur les versions sécurisées de la scanf famille de fonctions, consultezscanf_s , , _scanf_s_lwscanf_s, _wscanf_s_l.

Voir aussi

scanf Spécification de largeur
scanf Caractères de champ de type
scanf, , _scanf_lwscanf, ,_wscanf_l
scanf_s, , _scanf_s_lwscanf_s, ,_wscanf_s_l