2011-07-31 22 views
10

Todos sabemos en lenguajes basados ​​en C, printf ("% 11d", some_int); significa alinear a la derecha dentro de un campo de 11 caracteres, pero ¿qué sucede si quiero reemplazar esta constante 11 aquí con una variable dinámica, qué voy a hacer?Cómo pasar el parámetro n a printf ("% nd", some_int);

+0

páginas del manual pueden ser buenos amigos :) – Sujoy

Respuesta

17

Usted puede utilizar el carácter * para especificar el ancho del campo en su propio argumento:

printf("%*d", some_width, some_int); 
+1

jajaja, nunca supo sobre esta nota 0o – unkulunkulu

+0

: el argumento de anchura debe tener un tipo 'int', por lo que por lo general tendrá que usar un yeso para garantizar esta –

0

Una forma de hacer esto es utilizar un snprintf equivalente en un búfer de matriz de caracteres, con el fin de crear su cadena de formato printf. (Asegúrese de comprobar si hay desbordamientos de búfer, por supuesto.)

+0

Vaya, es la respuesta de Frédéric mejor que el mío. –

6

Lo que vas a leer la página printf(3) hombre y venir a través de lo siguiente:

En lugar de una cadena de dígitos decimales se puede escribir "*" o "* m $" (para un entero decimal m) para especificar que el ancho del campo se da en el siguiente argumento, o en el argumento m-th, respectivamente, que debe ser de tipo int.

2

use el comando linux: "man 3 printf" para obtener más información. Una forma de hacerlo es

printf("%*d", width, num); 

donde ancho es de precisión y num es argumento para imprimir. Otra forma equivalente al de arriba es

printf("%2$*1$d", width, num); 

más general esto se escribe como "* m $ d", donde m es de tipo int y el argumento número.

+0

La segunda opción no está en ISO C (creo que es una extensión POSIX) –

Cuestiones relacionadas