Nose si la estructura anidada esta bien declarada porque cuando voy a ingresar los datos del coordinador el programa deja de funcionar, y si estoy creando bien las cadenas y mercados dinamicamente?
/*
Crear las cadenas dinámicamente.
Los mercados crearlos dinámicamente. */
#include<stdio.h>
#include<stdlib.h>
typedef struct Mercados_Municipales{
char *nombre;
char *direccion;
char *telefono;
struct Datos_Coordinador *c;
}Mercados;
struct Datos_Coordinador{
char *nombrec;
char *apellidoc;
char *cedulac;
char *telefonoc;
};
void Presentacion();
Mercados *Leer_Mercado(void);
void Imprimir_Mercado(Mercados *mercado);
int main(){
Mercados *mercados[20];
char desicion;
int cantidad, mercado = 0;
Presentacion();
for(cantidad = 0; cantidad < 20; cantidad++){
printf("\n\tMercado Municipal #%d\n\n", cantidad
+ 1); mercados[cantidad] = Leer_Mercado();
do{
printf("\n\tPasamos a otro? [S/N] "); desicion
= getchar(); /* Leemos un caracter */ while(getchar() == EOF
); /* Necesario para que se coma el \n */
}while(desicion != 'S' && desicion != 's' && desicion != 'N' && desicion != 'n');
/* Si elige N o n, se sale */
if(desicion == 'N' || desicion == 'n') break;
}
printf("\nInformacion del Mercado: ");
Imprimir_Mercado(mercados[mercado - 1]);
return 0;
}
void Presentacion(){
printf("\t\t********************************\n"); printf("\t\t* Ciudad Guayana *\n"); printf("\t\t* Mercados municipales *\n"); printf("\t\t********************************\n"); }
Mercados *Leer_Mercado(){
Mercados
*mercado
= (Mercados
*) malloc(sizeof(Mercados
));
mercado
->nombre
= (char *) malloc(sizeof(char) * 20); mercado
->direccion
= (char *) malloc(sizeof(char) * 50); mercado
->telefono
= (char *) malloc(sizeof(char) * 15);
gets(mercado
->direccion
);
mercado
->c
->nombrec
= (char *) malloc(sizeof(char) * 20); mercado
->c
->apellidoc
= (char *) malloc(sizeof(char) * 20); mercado
->c
->cedulac
= (char *) malloc(sizeof(char) * 15); mercado
->c
->telefonoc
= (char *) malloc(sizeof(char) * 15);
printf("Informacion del Coordinador\n\n"); gets(mercado
->c
->nombrec
); gets(mercado
->c
->apellidoc
); gets(mercado
->c
->cedulac
); gets(mercado
->c
->telefonoc
);
return mercado;
}
void Imprimir_Mercado(Mercados *mercado){
printf("\n\tMercado Municipal: %s\n\n", mercado
->nombre
);
printf("Direccion: %s\tTelefono: %s\n\n", mercado->direccion, mercado->telefono);
printf("Datos del Coordinador:\n\n"); mercado->c->nombrec, mercado->c->apellidoc,
mercado->c->cedulac);
printf("Telefono: %s\n\n", mercado
->c
->telefonoc
); }