Presuponiendo que el ancho va a ser fijo es más sencillo usar printf
Y bueno, ya puestos no es complicado adaptar este código a anchos variables.
He aprovechado tu código yoel_alejandro para poner mi idea... estoy un poco apurado de tiempo. Espero que no te importe.
Código (c) [Seleccionar]
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
int i, j;
int ColumnsWidth[4] = { 10, 10, 20, 10 };
/* Contenido de la tabla, pones luego el código que la genera */
char *tabla[2][4] = { {"Hacker", "Perro", "Labrador", "Macho"},
{"Fugi", "Camaleon", "Silvestre", "Hembra"} };
char *titulos[4] = {"Nombre", "Animal", "Raza", "Sexo"};
char config[8];
int total = 0;
for ( j = 0; j < 4; j++ )
{
sprintf( config, "%%-%ds", ColumnsWidth[ j ] );
printf( config, titulos[ j ] );
total += ColumnsWidth[ j ];
}
putchar( '\n' );
while ( total )
{
putchar( '-' );
total--;
}
putchar( '\n' );
for ( i = 0; i < 2; i++ )
{
for ( j = 0; j < 4; j++ )
{
sprintf( config, "%%-%ds", ColumnsWidth[ j ] );
printf( config, tabla[ i ][ j ] );
}
printf( "\n" );
}
return 0;
}
Y bueno, ya puestos no es complicado adaptar este código a anchos variables.
Código (c) [Seleccionar]
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
int i, j;
int ColumnsWidth[4] = { 0 };
/* Contenido de la tabla, pones luego el código que la genera */
char *tabla[2][4] = { { "Hacker", "Perro", "Labrador", "Macho" },
{ "Fugi", "Camaleon", "Silvestre", "Hembra" } };
char *titulos[4] = { "Nombre", "Animal", "Raza", "Sexo" };
for ( j = 0; j < 4; j++ )
{
size_t width = strlen( titulos[ j ] );
if ( width > ColumnsWidth[ j ] )
ColumnsWidth[ j ] = width;
for ( i = 0; i < 2; i++ )
{
width = strlen( tabla[ i ][ j ] );
if ( width > ColumnsWidth[ j ] )
ColumnsWidth[ j ] = width;
}
ColumnsWidth[ j ] += 2;
}
char config[8];
int total = 0;
for ( j = 0; j < 4; j++ )
{
sprintf( config, "%%-%ds", ColumnsWidth[ j ] );
printf( config, titulos[ j ] );
total += ColumnsWidth[ j ];
}
putchar( '\n' );
while ( total )
{
putchar( '-' );
total--;
}
putchar( '\n' );
for ( i = 0; i < 2; i++ )
{
for ( j = 0; j < 4; j++ )
{
sprintf( config, "%%-%ds", ColumnsWidth[ j ] );
printf( config, tabla[ i ][ j ] );
}
printf( "\n" );
}
return 0;
}
He aprovechado tu código yoel_alejandro para poner mi idea... estoy un poco apurado de tiempo. Espero que no te importe.