Condividi tramite


Parametri posizionali printf_p

I parametri posizionali consentono di specificare il numero di argomenti che deve essere sostituito all'interno di un campo in una stringa di formato. Le seguenti funzioni di printf del parametro posizionale sono disponibili:

Specificare i parametri posizionali

Indicizzazione di parametro

Per impostazione predefinita le funzioni posizionali si comportano in modo identico a quelle non posizionali, se non è presente alcuna formattazione posizionale. I parametri posizionali sono specificati usando il formato "%m$x", dove m indica un numero ordinale numerico che indica la posizione del parametro nell'elenco dei parametri, precedenti alla stringa di formato e x indica il tipo di carattere del campo del tipo specificato nella funzione printf. I parametri nell'elenco sono indicizzati a partire dal valore 1 per il primo elemento nell'elenco e così via. Per informazioni aggiuntive relative ai caratteri di campo del tipo, vedere Caratteri di campo di tipo per printf.

Per un esempio su questo comportamento:

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

stamperà

November 10

L'ordine dei numeri utilizzati non deve corrispondere all'ordine degli argomenti forniti. Quindi la seguente sintassi è valida:

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

stamperà

10 November

Il parametro può essere utilizzato più volte durante la formattazione, a differenza delle stringhe di formato tradizionali, in modo tale che

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

stamperà

10 times 10 is 100

Tuttavia, tutti gli argomenti devono essere utilizzati almeno una volta da qualche parte nella stringa di formato.

Il numero massimo di parametri posizionali consentiti in una stringa di formato è fornito da _ARGMAX.

Larghezza e previsione

Quando il simbolo * viene utilizzato per specificare che la larghezza o la precisione è determinata da un argomento, la posizione della larghezza o un valore di previsione deve trovarsi immediatamente dopo il simbolo *. Di seguito è riportato un esempio:

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

o

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

Combinare argomenti posizionali e non posizionali

I parametri posizionali non possono essere combinati con parametri non posizionali nella stessa stringa di formato. Tuttavia, printf_s e funzioni relative supportano ancora i parametri non posizionali nelle stringhe di formato non contenenti parametri posizionali.

Esempio

// 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);
}
  

Vedere anche

Riferimenti

Caratteri di campo di tipo per printf

Specifica della larghezza per printf

Specifica precisione