Dar formato al mostrar array de estructura en C

Iniciado por Torino10, 19 Abril 2012, 16:35 PM

0 Miembros y 1 Visitante están viendo este tema.

Torino10

Hola!

Quisiera saber si hay alguna forma o tienen algún ejemplo de como mostrar un array de estructura en forma de registros...

Tengo un array del tipo "estruct informacionpersonal", esta estructura tiene nombre, dni, edad, telefono, direccion, etc...

A la hora de mostrarlo comúnmente me saldría así

matricula: ...
Nombre: ...
dni: ...
edad: ...
telefono: ...
etc...

Trate de mostrarlo de la siguiente forma

matricula         nombre          dni        edad        telefono       etc
...                    ...                  ...         ...            ...                ...
...                    ...                  ...         ...            ...                ...
...                    ...                  ...         ...            ...                ...

Me sale mostrarlo asi pero se me compica cuando algunos "campos" toma una longitud mas grande o mas chica como por ejemplo el nombre que puede variar...

Qué podria hacer para establecer tamaños fijos en cada "columna"?

Es mas, necesito mostrarlos asi porque debo ordenarlos por un numero de matricula que es el primer cambio y quiero que se vea el cambio del array al cargarlo desordenadamente y luego al quedar ordenado.

Saludos!
"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"

durasno

Hola! lo que podes hacer es usar los modificadore de formato, ejemplo:
printf("%10s %10s %10s\n","Nombre","matricula","dni");
printf("%10s %10s %10d\n","Torino10","AJFUDS",12345678);


El numero 10 entre "%" y "s" indica que va a ocupar un minimo de 10 espacios comenzando desde la derecha. Si queres justificarlo hacia la izquierda solo le agragras el menos: %-10s

Saludos
Ahorrate una pregunta, lee el man

Torino10

Ahora pruebo, gracias por responder y de paso aprovecho para hacerte una consulta...

Estoy creando una función para buscar un "registro" dentro de un array del tipo struct. El mismo que puse arriba de ejemplo.

Tengo que buscar por nombre y la hice asi

int busquedapornombre (struct infopersonal *puntero, int dim, char val)
{   
    int encontrado=-1;

    for (int i=0; i<dim; i++)
        {
        if (strcmp(puntero[i].nombre, val)==0)
           {
           encontrado=i;
           }   
        }
   
    return encontrado;
}


Me sale el siguiente error: "no match for 'operator[]' in 'puntero' "

Qué podra ser que estoy haciendo mal?

A la función la llamo del main de la siguiente forma

ordenarpornombre (vec, dim, val);

Y la tengo definida asi

int busquedapornombre (struct infopersonal *puntero, int dim, char val);
"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"

durasno

No se porque te marca como si el error fuese el puntero, lo que veo mal es el uso de strcmp, esta funcion recive dos puntero a char(char *) y vos le estas pasando "val" que es un char. Corregi eso

Saludos
Ahorrate una pregunta, lee el man

Torino10

Muchisimas gracias por la ayuda!

Era ese el error y ya esta solucionado!

Un abrazo!
"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"