Estoy agregando esta respuesta para especificar las reglas de la norma.
Aquí se está utilizando el valor de retorno de printf
. Respectivamente 3-1
espacios (' '
) y luego otra vez espacio (como usted especificó) y 4-1
espacios y luego nuevamente se está imprimiendo 1 espacio. Y luego se devuelve la cantidad total de caracteres escritos. Así es como se hace la suma.
acabo de recordar esta regla
printf("%*c",X,C) prints the char C in a field of size X
Todas estas comportamiento se explica en C11 estándar.
De estándar §7.21.6.1p4
Una anchura de campo mínimo opcional. Si el valor convertido tiene menos caracteres que el ancho de campo, se rellena con espacios (por defecto) a la izquierda (o hacia la derecha, si el indicador de ajuste izquierdo, descrito más adelante, se ha dado) a la ancho de campo El ancho del campo toma la forma de un asterisco *
(descrito más adelante) o un entero decimal no negativo.
Y en la misma sección §7.21.6.1p5
Como se señaló anteriormente, una anchura de campo, o la precisión, o ambos, pueden ser indicado por un asterisco.En este caso, un argumento int suministra el ancho campo o la precisión
Por fin §7.21.6.1.p14
La función fprintf
devuelve el número de caracteres transmitidos o un valor negativo si se produjo un error de salida o codificación.
para despejar su idea de este ejemplo será lo suficientemente bueno (estoy usando %d
aquí para que se entiende la idea del campo).
Si x = 10
y y=2
entonces será
printf("%*d%*d", x, x, y, y);
Más claramente
| | | | | | | | |1|0| |2|
1 2 3 4 5 6 7 8 9 10 \ \
11 12
That's how 12 characters are printed.
Este código tiene también algo significativo efecto secundario. –
único efecto secundario que sé es que cambia la salida de acuerdo con la cantidad de espacios que recibe como entrada. Algo más ? – Peps0791
Pero ese efecto secundario es importante. No puedes simplemente decir que es una forma extraña de hacer una adición. –