Impresión del bloc de notas izquierdo con espacios

3 minutos de lectura

avatar de usuario
señuelo de titanio

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

Por ejemplo, quiero imprimir “Hola” con 40 espacios antes.

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

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

Si desea que la palabra “Hola” se imprima en una columna de 40 caracteres de ancho, con espacios 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 formateas las cosas cuando sabes qué ancho quieres que tenga la columna, pero los datos cambian (bueno, es una forma en que puede hacerlo).

Si sabe que quiere exactamente 40 espacios, entonces algo de texto, simplemente guarde los 40 espacios en una constante e imprímalos. Si necesita imprimir varias líneas, utilice varias printf sentencias como la de arriba, o hacerlo en un bucle, cambiando el valor de ptr cada vez.

  • no sé mucho acerca de las banderas de formato. pero sospecho que printf(“%40s%s\n”, “”, ptr); ¿Se puede usar para rellenarlo con 40 espacios también?

    – Johannes Schaub – litb

    16 de noviembre de 2008 a las 4:06

  • Sí, eso siempre le daría 40 espacios antes del contenido del puntero. Esa es una buena solución, pero si tiene 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.

    – Bill el lagarto

    16 de noviembre de 2008 a las 4:13

  • Además, si tiene una variable int ‘n’ que contiene el número de espacios a incluir, puede usar: printf(“%*s%s\n”, n, “”, ptr); para obtener un número variable de espacios.

    –Jonathan Leffler

    16 de noviembre de 2008 a las 4:37

  • Y, para abordar la última parte de la P: sí, si desea que cada línea de los datos se imprima con 40 espacios iniciales, entonces necesita segmentar los datos para que cada línea se imprima por separado.

    –Jonathan Leffler

    16 de noviembre de 2008 a las 4:38

  • @Jonathan Leffler: por supuesto, el compilador puede optimizar los formatos de impresión. Por ejemplo, GCC optimiza printf(“%s\n”, foo) y lo reemplaza con puts(foo).

    – sam hocevar

    10 de enero de 2010 a las 1:16

avatar de usuario
jk_

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

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

  • Me gusta su uso de la concatenación de cadenas literales 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 cadena de sangría. De esa manera, la sangría == 0 funcionará como se esperaba. (es decir, printf(..., indent, "", ...))

    – ɲeuroburɳ

    04/08/2015 a las 15:36

  • Tenga en cuenta que Ray Hulha ha eliminado la concatenación literal de cadenas, evidentemente para solucionar un “problema del compilador”.

    – mwfearnley

    1 oct 2017 a las 14:03

avatar de usuario
Rece Foc

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

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

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

Este método que usa un parámetro para determinar los 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.

  • tengo error: empty character constant por ''. ¿No debería ser ' '?

    – Jin Kwon

    6 de junio de 2018 a las 6:24


  • Sí, debería.

    – Shjeff

    3 de diciembre de 2018 a las 0:53

  • @JinKwon cualquier personaje, al igual que "Hello" podría ser cualquier cosa, debería haber usado un ejemplo

    – joe peletier

    3 de marzo de 2019 a las 20:57

  • Me gusta este comentario para espacios después de la cadena.

    – uno

    17 de mayo de 2017 a las 9:53

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad