Hay varios errores lógicos en tu código. Por ejemplo, si una fila contienes un valor positivo, por ejemplo 1, y el resto son valores negativos de más de una cifra
max devolverá 1...
Cúrate en salud y trabaja con cadenas.
printf puede trabajar con anchos de campo variables si utilizas cadenas:
Con el asterisco estas diciendo que el ancho de campo que hay que utilizar está contenido en una variable, y en la lista de parámetros primero indicas el ancho de campo y luego la cadena que quieres imprimir, así que el código anterior imprime "Hola" en 10 espacios (rellena el resto con espacios en blanco). No recuerdo si por defecto lo alineaba a la derecha o a la izquierda, si no lo alinea hacia el lado que quieras pon un signo negativo antes del asterisco.
Ahora tendrás que imprimir los números en una cadena. No se cual es el valor del entero más alto usando 64 bits, me parece que anda por el orden de 10^20, así que con una cadena de 25 caracteres te debería de bastar. Para imprimir un entero en una cadena se usa
sprintf:
sprintf(una_cadena
,"%d",un_entero
);
sprintf funciona como
printf, pero su primer parámetro siempre es una cadena sobre la que se imprimirán los datos de la cadena de formato.
Ahora que sabes esto, puedes ir imprimiendo los valores en una cadena, usar
strlen para saber cual es la longitud máxima de los números que tienes, almacenar el valor en una variable
long_max, e imprimir cada valor, pasándolo a una cadena
str_valor en un bucle:
printf("%*s ",long_max
,str_valor
);
¡Saludos!
Estoy tonto. El ancho de campo variable, usando el asterisco, puedes aplicarlo a cualquier formato en el que se pueda definir un ancho de campo, cadenas, enteros y reales.
Lo único que tendrías que hacer sería calcular la longitud de cada número modificando la función que ya tienes. Si el número es positivo ya tienes la solución, sino, tendrás que añadirle uno a la longitud. Así que iteras sobre las columnas para saber cual es el número de mayor longitud y usas ese valor, como antes, para imprimir los valores usando la longitud máxima como ancho de campo.
Yo añadiría un vector más para almacenar la mayor longitud de cada columna. Así podrás imprimir los valores de cada fila con el ancho correcto sin tener que dar demasiadas vueltas.
Lo anterior lo dejo, así ves alguna funcion nueva (ya he visto que tu ya la conocías, pero seguro que no todos los que entren la conocen XD).