Hola!
Mañana tengo un examen, y he decidido practicar un poquillo. La cosa es que esto de los punteros es un poco lioso, y no se donde he podido meter la pata. =S. Bueno, si, creo que es en la función llamada anadirRegistro. He hecho impresiones del vector en los sitios que creía que fallaban, y no pasaba nada. Menos en este último que he mencionado, que el compilador me dice que no existe alumno, o algo así.
Me podéis echar un ojo a esto?
Código después del Spoiler // Sorry pero la identación se va a la mierda e igual es molesto
spoiler
/*Programa que crea, y permite modificar o borrar alumnos asociados a profesores.
Version 1.0
Fecha 27/05/10
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXNOM 10
#define MAXALU 5
/*Estructuras que nos permiten añadir alumnos a distintos profesores.*/
struct _Alumno{
char nombreAlu[MAXNOM];
};
struct _Prof_alu{
char nombreProf[MAXNOM];
struct _Alumno alumno[MAXALU];
};
typedef struct _Prof_alu Profesores;
/**Declaracion de funciones**/
int menu();
void anadirRegistro(Profesores **vProfesores, int *n, Profesores registro);
void insertarRegistro(int *registros,Profesores **vector);
void leerRegistro(Profesores *nuevoReg);
void imprimirRegistro(Profesores *reg);
/**Programa principal**/
int main(){
int opcion, nReg; /*nReg - numero de Registros*/
Profesores *lista;
nReg = 1;
do{
opcion = menu();
switch(opcion){
case 1:
insertarRegistro(&nReg, &lista);
break;
case 2:
imprimirRegistro(lista); /*No se muestra correctamente*/
break;
}
}while(opcion != 0);
return 0;
}
/*Menu que se muestra al comienzo del programa*/
int menu(){
int seleccion;
printf("\n\t Selecciona una opcion\t\n");
printf("\n\t Opcion 1. Anadir Profesor.\t");
printf("\n\t Opcion 2. Mostrar Profesores\t");
printf("\n\t Opcion 3.\t");
printf("\n\t Salir. 0\t");
scanf("%d", &seleccion);
while(seleccion < 0 || seleccion > 3){
printf("\n\t ¡¡ No existe esa opcion !! \n");
printf("\t ");
scanf("%d", &seleccion);
}
return seleccion;
}
/*Funcion que inserta un nuevo registro al final del vector
Parametros:
nReg E/S numero de registros
vLista /S vector actualizado
*/
void insertarRegistro(int *nReg, Profesores **vLista){
Profesores nuevoReg;
leerRegistro(&nuevoReg);
++(*nReg);
anadirRegistro(&(*vLista), nReg, nuevoReg);
}
/*Funcion que nos permite introducir los datos Profesor y alumno
Parametros:
nuevoReg /S registro donde estara toda la informacion nueva
*/
void leerRegistro(Profesores *nuevoReg){
int contador;
printf("Escribe el nombre del Profesor: \n");
scanf("%s", (*nuevoReg).nombreProf);
/*Recorremos los alumnos*/
for(contador = 0; contador < MAXALU; contador++){
printf("Escribe el nombre del alumno %d: \n", contador + 1);
scanf("%s", ((*nuevoReg).alumno[contador].nombreAlu));
/*Prueba de que aqui todo esta bien,
printf("\n[%d]%s\n", contador+1, ((*nuevoReg).alumno[contador].nombreAlu));*/
}
}
/*Funcion que añade un registro al final de otro
parametros:
vProfesores E/S vector de profesores
n E/S numero de registros
registro E/ nuevo registro de profesores
*/
void anadirRegistro(Profesores **vProfesores, int *n, Profesores registro){
Profesores *aux;
int contador;
contador = *n; /*Numero de registros a contador*/
if((*n)==1){ /*Si es el primer registro*/
*vProfesores = (Profesores *)malloc(sizeof(Profesores));
**(vProfesores) = registro;
}else{
aux = *vProfesores; /*Le damos el valor del registro*/
aux = (Profesores *)realloc(*vProfesores, contador*sizeof(Profesores)); /*Reasignamos memoria del tamaño*/
/*de los registros que haya*/
if(aux != NULL){
*vProfesores = aux;
aux = aux + (contador - 1);
*aux = registro;
free(aux);
}
}
/*Aqui es donde no consigo imprimir por pantalla para ver si funciona bien*/
for(contador = 0; contador < MAXALU; contador++){
printf("\n[%d]%s\n", contador+1, (vProfesores).alumno[contador].nombreAlu);
}
}
void imprimirRegistro(Profesores *reg){
int cont=0;
printf("\n%s", (*reg).nombreProf);
for(cont = 0; cont < MAXALU; cont++){
printf("\n[%d]%s", cont+1, (*reg).alumno[cont].nombreAlu);
}
printf("\n");
}