Compartilhar via


printf_p posicional parâmetros

Parâmetros de posição oferecer a capacidade de especificar pelo número que dos argumentos deve ser substituída em um campo em uma cadeia de formato.O seguinte parâmetro posicional printf funções estão disponível:

Especificando parâmetros posicional

Indexação de parâmetros

Tenham por padrão as funções posicionais comportam idêntico à posição sem os, se nenhuma formatação posicional estiver presente.Parâmetros de posição é especificada usando o formato"%m$x", onde m indica um número ordinal numérico indicando a posição do parâmetro na lista de parâmetros, precedendo a seqüência de caracteres de formato e x indica o tipo de caractere do campo tipo especificado na printf função. Os parâmetros na lista são indexados começando com o valor 1 para o primeiro elemento na lista e assim por diante.Para obter informações adicionais sobre os caracteres de campo de tipo, consulte printf digitar caracteres de campo.

Para obter um exemplo desse comportamento:

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

será impressa

November 10

A ordem dos números usados não precisa corresponder a ordem dos argumentos fornecidos.Assim, o seguinte é válido:

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

será impressa

10 November

Parâmetro pode ser usado mais de uma vez durante a formatação, ao contrário no tradicional Formatar seqüências de caracteres, assim que

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

será impressa

10 times 10 is 100

No entanto, todos os argumentos devem ser usados pelo menos uma vez em algum lugar na seqüência de caracteres de formato.

O número máximo de parâmetros posicionais permitidos em uma seqüência de caracteres de formato é especificado por _ARGMAX.

Largura e Prevision

Quando o * símbolo é usado para especificar que a largura ou a precisão deve ser determinada a partir de um argumento e, em seguida, a posição do valor largura ou prevision deve aparecer imediatamente seguinte a * símbolo.Por exemplo,

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

ou

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

Mixagem posicionais e sem argumentos posicionais

A parâmetros posicionais não podem ser misturada com parâmetros não posicionais na seqüência de caracteres de formato mesmo.No entanto, printf_s e funções relacionadas ainda suportam a parâmetros posicionais-não em seqüências de caracteres de formato contendo parâmetros de posição.

Exemplo

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

1 2 3 3 1 2 1 2 1 abc def ghi ghi abc def

Consulte também

Referência

printf digitar caracteres de campo

Especificação de largura de printf

Especificação de precisão