Parametri posizionali printf_pprintf_p Positional Parameters

I parametri posizionali consentono di specificare in modo numerico gli argomenti da sostituire in un campo in una stringa di formato.Positional parameters provide the ability to specify by number which of the arguments is to be substituted into a field in a format string. Sono disponibili le seguenti funzioni printf di parametro posizionale:The following positional parameter printf functions are available:

Funzioni printf non posizionaliNon-positional printf functions Equivalenti di parametri posizionaliPositional parameter equivalents
printf, _printf_l, wprintf, _wprintf_lprintf, _printf_l, wprintf, _wprintf_l _printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l _sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l
_cprintf, _cprintf_l, _cwprintf, _cwprintf_l_cprintf, _cprintf_l, _cwprintf, _cwprintf_l _cprintf_p, _cprintf_p_l, _cwprintf_p, _cwprintf_p_l_cprintf_p, _cprintf_p_l, _cwprintf_p, _cwprintf_p_l
fprintf, _fprintf_l, fwprintf, _fwprintf_lfprintf, _fprintf_l, fwprintf, _fwprintf_l _fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l
vprintf, _vprintf_l, vwprintf, _vwprintf_lvprintf, _vprintf_l, vwprintf, _vwprintf_l _vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_l_vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_l
vfprintf, _vfprintf_l, vfwprintf, _vfwprintf_lvfprintf, _vfprintf_l, vfwprintf, _vfwprintf_l _vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_l_vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_l
vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_lvsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l _vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l_vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l

Impostazione dei parametri posizionaliHow to specify positional parameters

Indicizzazione dei parametriParameter indexing

Per impostazione predefinita, se non è presente alcuna formattazione posizionale, le funzioni posizionali si comportano in modo identico a quelle non posizionali.By default, if no positional formatting is present, the positional functions behave identically to the non-positional ones. Il parametro posizionale da formattare viene specificato inserendo %n$ all'inizio dell'identificatore di formato, dove n corrisponde alla posizione del parametro da formattare all'interno dell'elenco dei parametri.You specify the positional parameter to format by using %n$ at the beginning of the format specifier, where n is the position of the parameter to format in the parameter list. La posizione del parametro parte da 1 per il primo argomento dopo la stringa del formato.The parameter position starts at 1 for the first argument after the format string. La restante parte dell'identificatore di formato segue le stesse regole dell'identificatore di formato printf.The remainder of the format specifier follows the same rules as the printf format specifier. Per altre informazioni sugli identificatori di formato, vedere Sintassi per la specifica del formato: funzioni printf wprintf.For more information about format specfiers, see Format Specification Syntax: printf and wprintf Functions.

Di seguito è riportato un esempio di formattazione posizionale:Here's an example of positional formatting:

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

Verrà stampato quanto segue:This prints:

November 10  

Non è necessario che l'ordine dei numeri usati corrisponda a quello degli argomenti specificati.The order of the numbers used doesn't need to match the order of the arguments. Ad esempio, la stringa di formato seguente è valida:For example, this is a valid format string:

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

Verrà stampato quanto segue:This prints:

10 November  

A differenza delle stringhe di formato tradizionali, i parametri posizionali possono essere usati più volte in una stringa di formato.Unlike traditional format strings, positional parameters may be used more than once in a format string. Ad esempio,For example,

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

Verrà stampato quanto segue:This prints:

10 times 10 is 100  

Tutti gli argomenti devono essere usati almeno una volta in un punto della stringa di formato.All arguments must be used at least once somewhere in the format string. Il numero massimo di parametri posizionali consentiti in una stringa di formato è indicato dal valore _ARGMAX.The maximum number of positional parameters allowed in a format string is given by _ARGMAX.

Larghezza e precisioneWidth and precision

È possibile usare *n$ per specificare un parametro posizionale come identificatore di larghezza o precisione, dove n corrisponde alla posizione del parametro di larghezza o precisione all'interno dell'elenco dei parametri.You can use *n$ to specify a positional parameter as a width or precision specifier, where n is the position of the width or precision parameter in the parameter list. La posizione del valore della larghezza o della precisione deve essere visualizzata subito dopo il simbolo *.The position of the width or precision value must appear immediately following the * symbol. Ad esempio,For example,

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

oppureor

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

Combinazione di argomenti posizionali e non posizionaliMixing positional and non-positional arguments

I parametri posizionali non possono essere combinati con i parametri non posizionali nella stessa stringa di formato.Positional parameters may not be mixed with non-positional parameters in the same format string. Se viene usata una formattazione posizionale, tutti gli identificatori di formato devono usare tale formattazione.If any positional formatting is used, all format specifiers must use positional formatting. Tuttavia, printf_p e l funzioni correlate supportano ancora i parametri non posizionali nelle stringhe di formato che non contengono parametri posizionali.However, printf_p and related functions still support non-positional parameters in format strings containing no positional parameters.

EsempioExample

// positional_args.c  
// Build by using: cl /W4 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     i = 1,  
            j = 2,  
            k = 3;  
    double  x = 0.1,  
            y = 2.22,  
            z = 333.3333;  
    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 arguments are numbers followed by a $ character.  
    _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);  

    // The positional arguments may appear in any order.
    _printf_p("%1$s %2$s %3$s\n", s1, s2, s3);  
    _printf_p("%3$s %1$s %2$s\n", s1, s2, s3);  

    // Precision and width specifiers must be int types.  
    _printf_p("%3$*5$f %2$.*4$f %1$*4$.*5$f\n", x, y, z, j, k);  
}  
1 2 3
3 1 2
1 2 1
abc def ghi
ghi abc def
333.333300 2.22 0.100

Vedere ancheSee Also

Sintassi per la specifica del formato: funzioni printf e wprintfFormat Specification Syntax: printf and wprintf Functions