Pregunta

Tengo dos funciones, una que produce mensajes como Iniciando inicialización ... y otra que verifica los códigos de retorno y genera " Ok " , " Advertencia " o " Error " . Sin embargo, la salida que se produce es de diferente longitud:

Starting initialization...Ok.
Checking init scripts...Ok.

¿Cómo puedo obtener algo como esto?

Starting initialization...       Ok.
Checking init scripts...         Ok.
¿Fue útil?

Solución

Puede especificar el ancho en los campos de cadena, por ejemplo,

printf("%-20s", "initialization...");

y luego todo lo que se imprima con ese campo se rellenará con el ancho que indique.

El - justifica el texto a la izquierda en ese campo.

Otros consejos

printf permite formatear con especificadores de ancho. por ejemplo


printf( "%-30s %s\n", "Starting initialization...", "Ok." );

Usaría un especificador de ancho negativo para indicar la justificación a la izquierda porque el valor predeterminado es usar la justificación a la derecha.

Además, si desea la flexibilidad de elegir el ancho , puede elegir entre uno de los dos formatos siguientes (con o sin truncamiento):

int width = 30;
//no truncation uses %-*s
printf( "%-*s %s\n", width, "Starting initialization...", "Ok." );
// output is "Starting initialization...     Ok."

//truncated to the specified width uses %-.*s
printf( "%-.*s %s\n", width, "Starting initialization...", "Ok." ); 
// output is "Starting initialization... Ok."

También está el modificador % n que puede ayudar en ciertas circunstancias. Devuelve la columna en la que estaba la cadena hasta ahora. Ejemplo: desea escribir varias filas que estén dentro del ancho de la primera fila como una tabla.

int width1, width2;
int values[6][2];
printf("|%s%n|%s%n|\n", header1, &width1, header2, &width2);

for(i=0; i<6; i++)
   printf("|%*d|%*d|\n", width1, values[i][0], width2, values[i][1]);

imprimirá 2 columnas del mismo ancho de cualquier longitud que puedan tener las dos cadenas header1 y header2 . No sé si todas las implementaciones tienen el % n pero Solaris y Linux sí.

También existe la solución de baja tecnología para contar espacios a mano para hacer que sus mensajes se alineen. Nada le impide incluir algunos espacios finales en las cadenas de mensajes.

Comience con el uso de Tabulaciones, el modificador de caracteres \ t . Avanzará a una ubicación fija (columnas, jerga terminal). Sin embargo, no ayuda si hay diferencias de más del ancho de columna (4 caracteres, si recuerdo bien).

Para solucionarlo, escriba su " OK / NOK " utilice un número fijo de pestañas (¿5? 6 ?, inténtelo), luego devuelva ( \ r ) sin un nuevo forro, y escriba su mensaje.

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