Estructuras Anidadas, dudas

Iniciado por mari2diaz, 8 Febrero 2020, 21:28 PM

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

mari2diaz

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: ");
scanf("%d", &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);

printf("Nombre: ");
gets(mercado->nombre);
printf("Direccion: ");
gets(mercado->direccion);
printf("Telefono: ");
gets(mercado->telefono);

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");
printf("\tNombre: ");
gets(mercado->c->nombrec);
printf("\tApellido: ");
gets(mercado->c->apellidoc);
printf("\tCedula: ");
gets(mercado->c->cedulac);
printf("\tTelefono: ");
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");
printf("%s %s\tCedula: %s\n",
       mercado->c->nombrec, mercado->c->apellidoc,
   mercado->c->cedulac);
    printf("Telefono: %s\n\n", mercado->c->telefonoc);
}

ivancea96

El Coordinador "c" es también un puntero, así que hay que inicializarlo con memoria:
Código (cpp) [Seleccionar]
mercado->c = (...) malloc(...);