paramètres positionnels de printf_p
Les paramètres positionnels permettent de spécifier par le numéro qui des arguments doit être substituée dans un champ dans une chaîne de format.les fonctions suivantes d' printf de paramètre positionnel sont disponibles :
printf, _printf_l, wprintf, _wprintf_l
_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l_cprintf, _cprintf_l, _cwprintf, _cwprintf_l
_cprintf_p, _cprintf_p_l, _cwprintf_p, _cwprintf_p_lfprintf, _fprintf_l, fwprintf, _fwprintf_l
_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_lvprintf, _vprintf_l, vwprintf, _vwprintf_l
_vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_lvfprintf, _vfprintf_l, vfwprintf, _vfwprintf_l
_vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_lvsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l
_vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l
Spécifier les paramètres positionnels
indexation de paramètre
Par défaut les fonctions de position se comportent de la même façon non à la position ces derniers, si aucune mise en forme de position n'est présent.Les paramètres positionnels sont spécifiés à l'aide de le format « %m$x », où m désigne un nombre ordinal numérique indiquant la position du paramètre dans la liste de paramètres, avant la chaîne de format etx indique le type de caractère de champ de type spécifié dans la fonction d' printf .Les paramètres de la liste sont démarrer indexé à la valeur 1 pour le premier élément de la liste etc.Pour des informations supplémentaires concernant les caractères de champ de type, consultez type de caractères printf de champ.
Pour obtenir un exemple de ce comportement :
_printf_p("%1$s %2$s", "November", "10");
sera imprimé dans sa
November 10
L'ordre des nombres utilisés n'a pas besoin de correspondre à celui des arguments donnés.Ce qui suit est valide :
_printf_p("%2$s %1$s", "November", "10");
sera imprimé dans sa
10 November
Le paramètre peut être utilisé plusieurs fois pour la mise en forme, contrairement à les chaînes de format traditionnelles, afin que
_printf_p("%{1$d times %1$d is %2$d", 10, 100);
sera imprimé dans sa
10 times 10 is 100
Toutefois, tous les arguments doivent être utilisés au moins une fois en cours dans la chaîne de format.
Le nombre maximal de paramètres positionnels autorisés dans une chaîne de format est fourni par _ARGMAX.
Largeur et prévue
Lorsque le symbole * est utilisé pour spécifier que la largeur ou la précision doit être déterminée d'un argument, la position de la largeur ou de la valeur de prévue doit apparaître immédiatement après le symbole *.Par exemple :
_printf_p("%1$*2$s","Hello", 10);
ou
_printf_p("%2$*1$s",10, "Hello");
Combinaison de position et non arguments de position
Les paramètres positionnels ne peuvent être associés aux paramètres non position dans la même chaîne de format.Toutefois, printf_s et les fonctions liées prennent en charge toujours des paramètres non position dans les chaînes de format ne contenant pas de paramètre positionnel.
Exemple
// positional_args.c
// Positional arguments allow the specification of the order
// in which arguments are consumed in a formatting string.
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 1,
j = 2,
k = 3;
double x = 0.1,
y = 0.2,
z = 0.3;
char *s1 = "abc",
*s2 = "def",
*s3 = "ghi";
// If positional arguments are unspecified,
// normal input order is used.
_printf_p("%d %d %d\n", i, j, k);
// Positional args are numbers indicating the
// argument enclosed in curly braces.
_printf_p("%3$d %1$d %2$d\n", i, j, k);
// The same positional argument may be reused.
_printf_p("%1$d %2$d %1$d\n", i, j);
_printf_p("%1$s %2$s %3$s\n", s1, s2, s3);
_printf_p("%3$s %1$s %2$s\n", s1, s2, s3);
}
Voir aussi
Référence
type de caractères printf de champ