2009-06-16 15 views

Respuesta

43

It's used to specify, in a dynamic way, what the width of the field is:

  • La anchura no se especifica en la cadena de formato, pero como un argumento adicional valor número entero que precede a la argumento que tiene que ser formateado.

por lo que "guión" especifica la cantidad de espacio disponible para ubicar la cadena que le sigue en la lista de parámetros.

Así,

printf("%*s", 5, ""); 

es lo mismo que

printf("%5s", ""); 

Es una buena manera de poner algunos espacios en su archivo, evitando un bucle.

+0

Gracias por la aclaración. Busqué en Google un poco, pero no pude encontrar la respuesta. – Aamir

+0

No puedo conseguir que esto funcione con sscanf –

+3

@EthanHeilman, * significa algo COMPLETAMENTE diferente en la familia de funciones de scanf. –

0

* Hace que fprintf rellene la salida hasta que tenga n caracteres de ancho, donde n es un valor entero almacenado en el argumento de una función que precede al representado por el tipo modificado.

printf("%*d", 5, 10) //will result in "10" being printed with a width of 5. 
7

No utilice "% * s" en un búfer que no tenga terminación NULL (empaquetado) pensando que imprimirá solo el campo "longitud".

+10

¡Usa "%. * S" para lograr esto! –

0

El especificador de formato% 4s genera una cadena en un ancho de campo de 4, es decir, printf muestra el valor con al menos 4 posiciones de caracteres.

Si el valor que se va a generar es less de 4 posiciones de ancho, el valor es right justified en el campo de forma predeterminada.

Si el valor es greater de 4 posiciones de caracteres de ancho, el ancho del campo expands para acomodar el número apropiado de caracteres.

Para justificar el valor a la izquierda, use un entero negativo para especificar el ancho del campo.

Referencias: Java™ How To Program (Early Objects), Tenth Edition

Cuestiones relacionadas