Udostępnij za pośrednictwem


printf_p Parametry pozycyjne

Parametrów pozycyjne zapewniają możliwość określony numerem, który z argumentów należy zastąpić w polu w ciągu formatu.Następujący parametr pozycyjne printf dostępne są funkcje:

Określanie parametrów pozycyjne

Parametr indeksowania

Domyślnie funkcje pozycyjne zachowują się identycznie do pozycji innych niż te, jeśli pozycyjne formatowanie nie jest obecny.Parametry pozycyjne są określane przy użyciu formatu "%m$x", gdzie m oznacza numeryczne liczbę porządkową wskazujące położenie parametru na liście parametrów, poprzedzających ciąg formatu i x wskazuje typ znaków pola Typ określony w printf funkcji.Parametry na liście są indeksowane począwszy od wartości 1 dla pierwszego elementu na liście i tak dalej.Aby uzyskać dodatkowe informacje dotyczące znaków pola Typ, zobacz printf — Znaki pola typu.

Na przykład ten problem:

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

zostanie wydrukowany

November 10

Kolejność numerów używanych brak tej konieczności Kolejność argumentów, biorąc pod uwagę.Zatem ważne jest następujące:

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

zostanie wydrukowany

10 November

Parametr może być używane więcej niż raz podczas formatowania, inaczej niż w tradycyjnych format ciągów, tak że

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

zostanie wydrukowany

10 times 10 is 100

Jednak wszystkie argumenty stosuje się co najmniej raz gdzieś w ciągu formatu.

Maksymalna liczba dozwolonych w ciągu formatu parametrów pozycyjne wyraża się przez _ARGMAX.

Przewidywanie i szerokość

Gdy * symbol jest używana do określenia, że szerokość lub precision jest ustalane na podstawie argumentu, a następnie pozycję wartości szerokości lub przewidywanie musi znajdować się bezpośrednio po * symbol.Na przykład:

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

lub

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

Mieszanie pozycyjne i innych niż argumenty pozycyjne

Parametrów pozycyjne nie mogą być mieszane z parametrami pozycyjne w ten sam ciąg formatu. Jednakże printf_s i pokrewne funkcje nadal obsługuje parametrów pozycyjne format ciągów zawierających nie parametrów pozycyjne.

Przykład

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

Zobacz też

Informacje

printf — Znaki pola typu

printf — Specyfikacje szerokości

Specyfikacja dokładności