Luego, tengo que crear un arreglo dinamico de estructura en el cual tengo que guardar los datos del arreglo estatico en el cual el codigo que tenga sea igual al pasado por parametro.
Luego, tengo que guardarlo en orden ascendente e imprimirlo por pantalla.
El problema es que en un momento del programa, creo que el problema esta en el while que esta entre la linea 51 y 64.
Código
#include <stdio.h> #include <stdlib.h> #define T 3 struct s_alumno { int leg; char*nombre; unsigned char cod_car }; typedef struct s_alumno t_alumno; t_alumno*filtrar(t_alumno[T],char cod_car); int main() { t_alumno arreglo[T]; t_alumno*lista=NULL; int i=0; arreglo[0].leg=3; arreglo[1].leg=4; arreglo[2].leg=5; arreglo[0].nombre="Claudio"; arreglo[1].nombre="Hernan"; arreglo[2].nombre="Pablo"; arreglo[0].cod_car='A'; arreglo[1].cod_car='B'; arreglo[2].cod_car='C'; printf("Legajo: %d - Nombre: %s - Codigo Carrera: %c\n",arreglo[0].leg,arreglo[0].nombre,arreglo[0].cod_car); printf("Legajo: %d - Nombre: %s - Codigo Carrera: %c\n",arreglo[1].leg,arreglo[1].nombre,arreglo[1].cod_car); printf("Legajo: %d - Nombre: %s - Codigo Carrera: %c\n",arreglo[2].leg,arreglo[2].nombre,arreglo[2].cod_car); lista=filtrar(arreglo,'B'); while((lista+i)->leg!=0) { printf("Legajo: %d - Nombre: %s - Codigo Carrera: %c\n",(lista+i)->leg,(lista+i)->nombre,(lista+i)->cod_car); i++; } return 0; } t_alumno*filtrar(t_alumno arreglo[T],char cod_car) { t_alumno*nuevo=NULL; t_alumno aux; int i=0,j=0,k=0,maximo=0; char codigo; while(i<T) { if(arreglo[i].cod_car==cod_car) { (nuevo+k)->leg=arreglo[i].leg; (nuevo+k)->cod_car=arreglo[i].cod_car; printf("Legajo: %d - Nombre: %s - Codigo Carrera: %c\n",(nuevo+k)->leg,(nuevo+k)->nombre,(nuevo+k)->cod_car); k++; } i++; } (nuevo+k)->leg=0; /// ORDENAR/// for(maximo=0;(nuevo+maximo)->leg!=0;maximo++); for(i=1;i<maximo;i++) { for(j=0;j<maximo-1;j++) { aux=*(nuevo+j); *(nuevo+j)=*(nuevo+j+1); *(nuevo+j+1)=aux; } } return nuevo; }