Compartir a través de


printf_p (Parámetros de posición)

Los parámetros posicionales proporcionan la capacidad de especificar por el número que de los argumentos debe ser sustituido en un campo en una cadena de formato. Las siguientes funciones de printf de parámetro posicional disponibles:

Especificar parámetros posicionales

Indización de parámetro

De forma predeterminada las funciones posicionales se comportan exactamente igual no a la posición unos, si no hay ningún formato posicional presente. Los parámetros posicionales se especifican con el formato “%m$x”, donde m indica un número ordinal numérico que indica la posición del parámetro en la lista de parámetros, antes de la cadena de formato y x indica el tipo de carácter de campo del tipo especificado en la función de printf . Los parámetros de la lista son el inicio indizado en el valor 1 para el primer elemento de la lista y así sucesivamente. Para obtener información adicional sobre los caracteres de campo tipo, vea printf (Caracteres de campo de tipo).

Para obtener un ejemplo de este comportamiento:

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

imprimir

November 10

El orden de los números utilizados no tiene que coincidir con el orden de los argumentos especificados. Así lo siguiente es válido:

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

imprimir

10 November

Puede utilizar el parámetro más de una vez al formatear, a diferencia de cadenas de formato tradicionales, para

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

imprimir

10 times 10 is 100

Sin embargo, todos los argumentos se deben utilizar al menos una vez en alguna parte de la cadena de formato.

El número máximo de parámetros posicionales permitidos en una cadena de formato se da por _ARGMAX.

Ancho y Prevision

Cuando el símbolo * se utiliza para especificar que el ancho o la precisión debe ser determinado de un argumento, la posición del ancho o el valor de la previsión debe aparecer inmediatamente después del símbolo *. Por ejemplo,

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

-O bien-

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

Argumentos posicionales y no tabulares el mezclar

Los parámetros posicionales no se pueden combinar con parámetros no posicionales en la misma cadena de formato. Sin embargo, printf_s y funciones relacionadas todavía admiten parámetros no posicionales en las cadenas de formato que no contienen ningún parámetro de posición.

Ejemplo

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

Vea también

Referencia

printf (Caracteres de campo de tipo)

printf (Especificación de ancho)

Especificación de precisión