Pregunta

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

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

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

EDITAR: para ser claros, quiero exactamente 40 espacios impresos antes de cada línea.

¿Fue útil?

Solución

Si quieres la palabra "Hola" para imprimir en una columna de 40 caracteres de ancho, con espacios rellenando a la izquierda, use 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 una forma de hacerlo).

Si sabe que desea exactamente 40 espacios, algo de texto, simplemente guarde los 40 espacios en una constante e imprímalos. Si necesita imprimir varias líneas, use varias declaraciones printf como la anterior, o hágalo en un bucle, cambiando el valor de ptr cada vez.

Otros consejos

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

void print_with_indent(int indent, char * string)
{
    printf("%*s%s", indent, "", string);
}
int space = 40;
printf("%*s", space, "Hello");

Esta declaración reservará una fila de 40 caracteres, imprime la cadena al final de la fila (eliminando espacios adicionales de modo que la longitud total de la fila sea constante en 40). Lo mismo puede usarse para caracteres y enteros de la siguiente manera:

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

Este método que usa un parámetro para determinar espacios es útil cuando se requiere un número variable de espacios. Estas declaraciones seguirán funcionando con literales enteros de la siguiente manera:

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

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

Si desea exactamente 40 espacios antes de la cadena, entonces debería hacer:

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

Si eso está demasiado sucio, puede hacerlo (pero será más lento que escribir manualmente los 40 espacios):      printf ("% 40s% s " ;, " " ;, myStr);

Si desea que la cadena se alinee en la columna 40 (es decir, que tenga hasta 39 espacios procediendo de tal manera que el carácter más a la derecha esté en la columna 40), haga esto:      printf ("% 40s " ;, myStr);

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top