El %*d
en un printf
le permite usar una variable para controlar el ancho de campo, a lo largo de las líneas de:
int wid = 4;
printf ("%*d\n", wid, 42);
que le dará:
..42
(con cada uno de los 0.123.caracteres siendo un espacio). El *
consume un argumento wid
y el d
consume el 42
.
La forma que tiene, como:
printf ("%*d %*d\n", a, b);
es un comportamiento no definido según la norma, ya que debe proporcionar cuatro argumentos después de que la cadena de formato, no dos (y buenos compiladores como gcc
le dirá sobre esto si subes el nivel de advertencia). De C11 7.20.6 Formatted input/output functions
:
Si no hay argumentos suficientes para el formato, el comportamiento no está definido.
Debería ser algo como:
printf ("%*d %*d\n", 4, a, 4, b);
Y la razón de que está recibiendo la salida extraña se debe a que el comportamiento no definido. This excellent answer le muestra el tipo de cosas que pueden salir mal (y por qué) cuando no sigue las reglas, especialmente en relación con esta situación.
Ahora no sería de esperar que esto sea un problema de falta de alineación, ya que está utilizando int
para todos los tipos de datos pero, como con todo el comportamiento indefinido, nada puede suceder.
Parece un especificador de ancho: http://www.cplusplus.com/reference/clibrary/cstdio/printf/ – Mysticial
@Mysticial Debe escribir eso como una respuesta .. – Ben
@Ben, es solo un enlace - que no lo hace no califica como una respuesta. Soy demasiado perezoso para expandirlo ... – Mysticial