Partager via


Paramètres positionnels printf_p

Les paramètres positionnels permettent de spécifier le nombre des arguments, qui doivent être remplacés dans un champ sous la forme d'une chaine. Les fonctions suivantes de paramètres positionnelsprintf sont disponibles :

Spécifier des paramètres positionnels

Indexation de paramètre

Par défaut les fonctions de position se comportent de la même manière que les autres, si aucune mise en forme positionnelle n'est présente. Les paramètres positionnels sont spécifiés à l'aide du format « %m$x », où m indique un nombre ordinal numérique indiquant la position du paramètre dans la liste des paramètres, précédant la chaîne de format et x indique le type de caractère de champ de type spécifié dans la fonction printf. Les paramètres de la liste sont indexés en partant de la valeur 1 pour le premier élément dans la liste et ainsi de suite. Pour des informations supplémentaires relatives au les caractères de champ de type, consultez Caractères du champ de type printf.

Pour obtenir un exemple de ce comportement, consultez .

_printf_p("%1$s %2$s", "November", "10");

s'imprime

November 10

L'ordre des valeurs utilisées n'a pas besoin de correspondre à celui des arguments fournis. La syntaxe suivante est valide :

_printf_p("%2$s %1$s", "November", "10");

s'imprime

10 November

L'option peut être utilisée plusieurs fois lors de la mise en forme, contrairement aux chaînes de format traditionnelles, afin que

_printf_p("%{1$d times %1$d is %2$d", 10, 100);

s'imprime

10 times 10 is 100

Toutefois, tous les arguments doivent être utilisés au moins une fois quelque part dans la chaîne de format.

Le nombre maximal de paramètres positionnels autorisés dans une chaîne de format est donné par _ARGMAX.

Largeur et prédiction

Lorsque le symbole * est utilisé pour spécifier que la largeur ou la précision doit être déterminée à partir d'un argument, la position de la largeur ou la valeur de la prédiction doit apparaître juste 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 d'arguments non positionnels.

Les paramètres positionnels ne peuvent être combinés avec des paramètres non positionnels dans la même chaîne de format. Toutefois, printf_s et les fonctions connexes prennent toujours en charge les paramètres non positionnels dans les chaînes de format qui ne contiennent aucun 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

Caractères du champ de type printf

Spécification de largeur printf

Spécifications de précision