Caractères du champ de type scanf

 

Date de publication : août 2016

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Les informations suivantes s'appliquent à la famille de fonctions scanf, y compris les versions sécurisées telles que scanf_s.

Le caractère type est le seul champ de format obligatoire. Il apparaît après les champs de format facultatifs. Le caractère type détermine si l'argument associé est interprété comme un caractère, une chaîne ou un nombre.

Caractères de type pour les fonctions scanf

CaractèreType d'entrée attenduType d'argumentArgument de taille dans la version sécurisée ?
cCaractère. Quand il est utilisé avec les fonctions scanf, spécifie un caractère codé sur un octet. Quand il est utilisé avec les fonctions wscanf, spécifie un caractère large. Les espaces blancs qui sont habituellement ignorés, sont lus quand c est spécifié. Pour lire le prochain caractère codé sur un octet et qui n'est pas un espace, utilisez %1s. Pour lire le prochain caractère large qui n'est pas un espace, utilisez %1ws.Pointeur vers char en cas d'utilisation avec les fonctions scanf, pointeur vers wchar_t en cas d'utilisation avec les fonctions wscanf.Requis. La taille n'inclut pas d'espace pour un terminateur Null.
CCaractère de taille inverse. Quand il est utilisé avec les fonctions scanf, spécifie un caractère large. Quand il est utilisé avec les fonctions wscanf, spécifie un caractère codé sur un octet. Les espaces blancs qui sont habituellement ignorés, sont lus quand C est spécifié. Pour lire le prochain caractère codé sur un octet et qui n'est pas un espace, utilisez %1s. Pour lire le prochain caractère large qui n'est pas un espace, utilisez %1ws.Pointeur vers wchar_t en cas d'utilisation avec les fonctions scanf, pointeur vers char en cas d'utilisation avec les fonctions wscanf.Requis. L'argument relatif à la taille n'inclut pas d'espace pour un terminateur Null.
dEntier décimal.Pointeur vers int.Non.
iEntier. Hexadécimal, si la chaîne d'entrée commence par "0x" ou "0X", octal si la chaîne commence par "0", sinon décimal.Pointeur vers int.Non.
oEntier octal.Pointeur vers int.Non.
pAdresse du pointeur en notation hexadécimale. Le nombre maximal de chiffres lus dépend de la taille d’un pointeur (32 ou 64 bits), lequel varie selon l’architecture de la machine. "0x" ou "0X" sont acceptés en tant que préfixes.Pointeur vers void*.Non.
uEntier décimal non signé.Pointeur vers unsigned``int.Non.
xEntier hexadécimal.Pointeur vers int.Non.
e, E, f, g, GValeur à virgule flottante composée d'un signe facultatif (+ ou -), d'une série d'un ou de plusieurs chiffres décimaux contenant la virgule décimale et d'un exposant facultatif ("e" ou "E") suivi d'une valeur entière éventuellement signée.Pointeur vers float.Non.
nAucune entrée lue à partir du flux ou de la mémoire tampon.Pointeur vers int, où sont stockés un certain nombre de caractères correctement lus à partir du flux ou de la mémoire tampon jusqu'à ce stade dans l'appel des fonctions scanf ou wscanf.Non.
sChaîne, jusqu'au premier espace blanc (espace, tabulation ou nouvelle ligne). Pour lire des chaînes non délimitées par des espaces, utilisez des crochets ([ ]), comme indiqué dans Spécification de largeur scanf.Quand il est utilisé avec les fonctions scanf, signifie un tableau de caractères codés sur un octet. Quand il est utilisé avec les fonctions wscanf, signifie un tableau de caractères larges. Dans les deux cas, le tableau de caractères doit être suffisamment grand pour le champ d'entrée, ainsi que le caractère Null de fin, qui est automatiquement ajouté.Requis. La taille inclut un espace pour un terminateur Null.
SChaîne de caractères de taille inverse, jusqu'au premier espace blanc (espace, tabulation ou nouvelle ligne). Pour lire des chaînes non délimitées par des espaces, utilisez des crochets ([ ]), comme indiqué dans Spécification de largeur scanf.Quand il est utilisé avec les fonctions scanf , signifie un tableau de caractères larges. Quand il est utilisé avec les fonctions wscanf , signifie un tableau de caractères codés sur un octet. Dans les deux cas, le tableau de caractères doit être suffisamment grand pour le champ d'entrée, ainsi que le caractère Null de fin, qui est automatiquement ajouté.Requis. La taille inclut un espace pour un terminateur Null.

Les spécificateurs a et A (consultez Caractères du champ de type printf) ne sont pas disponibles avec scanf.

Les arguments relatifs à la taille, le cas échéant, doivent être passés à la liste de paramètres immédiatement après l'argument auquel ils s'appliquent. Par exemple, le code suivant :

char string1[11], string2[9]; scanf_s("%10s %8s", string1, 11, string2, 9);  

lit une chaîne dont la longueur maximale est 10 dans string1, et une chaîne dont la longueur maximale est 8 dans string2. Il doit y avoir au moins une taille de mémoire tampon de plus qu'indiqué dans les spécifications de largeur, car l'espace doit être réservé pour le terminateur Null.

La chaîne de format peut gérer l'entrée codée sur un octet ou à caractère large, même si la version du caractère codé sur un octet ou la version des caractères larges de la fonction est utilisée. Ainsi, pour lire des caractères codés sur un octet ou des caractères larges avec les fonctions scanf et wscanf, utilisez les spécificateurs de format comme suit.

Pour lire un caractèreUtilisez cette fonctionAvec ces spécificateurs de format
octet uniquefonctions scanfc, hc ou hC
octet uniquefonctions wscanfC, hc ou hC
largesfonctions wscanfc, lc ou lC
largesfonctions scanfC, lc ou lC

Pour analyser des chaînes avec les fonctions scanf et wscanf, utilisez le tableau ci-dessus en vous servant des spécificateurs de type de format s et S à la place de c et C.

scanf, _scanf_l, wscanf, _wscanf_l

Afficher: