2008-11-16 21 views
76

¿Cómo puedo rellenar una cadena con espacios a la izquierda cuando uso printf?Imprimir con margen izquierdo con espacios

Por ejemplo, quiero imprimir "Hola" con 40 espacios que lo preceden.

Además, la cadena que deseo imprimir consta de varias líneas. ¿Debo imprimir cada línea por separado?

EDITAR: Para que quede claro, quiero exactamente 40 espacios impresos antes de cada línea.

Respuesta

81

Si desea que se imprima la palabra "Hola" en una columna de 40 caracteres de ancho, con los espacios a la izquierda, utilice lo siguiente.

char *ptr = "Hello"; 
printf("%40s\n", ptr); 

Eso le dará 35 espacios, luego la palabra "Hola". Así es como formatea las cosas cuando sabe qué tan ancho quiere la columna, pero los datos cambian (bueno, es uno forma de hacerlo).

Si sabes que quieres exactamente 40 espacios y algo de texto, simplemente guarda los 40 espacios en una constante e imprímelos. Si necesita imprimir varias líneas, use múltiples declaraciones printf como la anterior, o hágalo en un bucle, cambiando el valor de ptr cada vez.

+3

no demasiado sobre banderas de formato. pero sospecho que printf ("% 40s% s \ n", "", ptr); se puede utilizar para rellenar con 40 espacios también? –

+0

Sí, eso siempre le daría 40 espacios antes del contenido del puntero. Esa es una buena solución, pero si tienes que hacerlo mucho, creo que una constante con 40 espacios sería más rápida.No sé si el compilador puede optimizar los formatos de impresión. –

+2

@Bill: el compilador no puede optimizar los formatos printf(). –

13

Si desea exactamente 40 espacios antes de la cadena a continuación, sólo debe hacer:

printf("          %s\n", myStr); 

Si eso es demasiado sucia, puede hacerlo (pero será más lento que escribir manualmente las 40 plazas): printf("%40s%s", "", myStr);

Si desea que la cadena que se alinearon en la columna 40 (es decir, tienen hasta 39 espacios de proceder es tal que el derecho más carácter está en la columna 40) a continuación, haga lo siguiente: printf("%40s", myStr);

También se puede poner "hasta" 40 espacios después de la cadena haciendo: printf("%-40s", myStr);

+0

gusta este comentario para espacios después de la cadena – oneat

49

utilizo esta función para sangrar mi salida (por ejemplo, para imprimir una estructura de árbol). El indent es el número de espacios antes de la cadena.

void print_with_indent(int indent, char * string) 
{ 
    printf("%*s%s", indent, "", string); 
} 
+6

Me gusta el uso de la concatenación literal de cadena para mantener la sangría separada del resto del formato printf. Una sugerencia: use una cadena vacía en lugar de un solo espacio para la sangría. De esa manera, la sangría == 0 funcionará como se espera. (es decir, 'printf (..., indent," ", ...)') –

+0

¡Esta es exactamente la función que quería escribir! – Elemental

+0

Nota, Ray Hulha ha eliminado la cadena de concatenación literal, evidentemente para solucionar un "problema del compilador". – mwfearnley

18
int space=40; 
printf("%*s",space,"Hello"); 

Esta declaración se reservará una columna de 40 caracteres, cadena de impresión al final de la columna (no después de la columna, en el último número de columnas utilizadas columns.Total todavía será 40). Lo mismo se puede utilizar para los dígitos y los números enteros de la siguiente manera

printf("%*d",space,10); 
printf("%*c",space,''); 

Este método de utilización de espacios variables es útil en función de las llamadas en número variable de espacios es required.These declaraciones seguirán funcionando con enteros constantes de la siguiente manera

printf("%*d",10,10); 
printf("%*c",20,''); 
printf("%*s",30,"Hello"); 

Espero que esto ayude a alguien como yo en el futuro.

Cuestiones relacionadas