Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mari2diaz en 8 Febrero 2020, 21:28 pm



Título: Estructuras Anidadas, dudas
Publicado por: mari2diaz en 8 Febrero 2020, 21:28 pm
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?

Código
  1. /*
  2.       Crear las cadenas dinámicamente.
  3.       Los mercados crearlos dinámicamente.  */
  4.  
  5. #include<stdio.h>
  6. #include<stdlib.h>
  7.  
  8. typedef struct Mercados_Municipales{
  9. char *nombre;
  10. char *direccion;
  11. char *telefono;
  12. struct Datos_Coordinador *c;
  13. }Mercados;
  14.  
  15. struct Datos_Coordinador{
  16. char *nombrec;
  17. char *apellidoc;
  18. char *cedulac;
  19. char *telefonoc;
  20. };
  21.  
  22. void Presentacion();
  23. Mercados *Leer_Mercado(void);
  24. void Imprimir_Mercado(Mercados *mercado);
  25.  
  26. int main(){
  27. Mercados *mercados[20];
  28. char desicion;
  29. int cantidad, mercado = 0;
  30.  
  31. Presentacion();
  32.  
  33. for(cantidad = 0; cantidad < 20; cantidad++){
  34.  
  35. printf("\n\tMercado Municipal #%d\n\n", cantidad + 1);
  36. mercados[cantidad] = Leer_Mercado();
  37.  
  38. do{
  39.  
  40. printf("\n\tPasamos a otro? [S/N] ");
  41. desicion = getchar();       /* Leemos un caracter */
  42. while(getchar() == EOF);    /* Necesario para que se coma el \n */
  43.  
  44. }while(desicion != 'S' && desicion != 's' && desicion != 'N' && desicion != 'n');
  45. /* Si elige N o n, se sale */
  46. if(desicion == 'N' || desicion == 'n') break;
  47. }
  48.  
  49. printf("\nInformacion del Mercado: ");
  50. scanf("%d", &mercado);
  51.  
  52. Imprimir_Mercado(mercados[mercado - 1]);
  53.  
  54. return 0;
  55. }
  56.  
  57. void Presentacion(){
  58. printf("\t\t********************************\n");
  59. printf("\t\t*        Ciudad Guayana        *\n");
  60. printf("\t\t*     Mercados municipales     *\n");
  61. printf("\t\t********************************\n");
  62. }
  63.  
  64. Mercados *Leer_Mercado(){
  65.  
  66. Mercados *mercado = (Mercados *) malloc(sizeof(Mercados));
  67.  
  68. mercado->nombre = (char *) malloc(sizeof(char) * 20);
  69. mercado->direccion = (char *) malloc(sizeof(char) * 50);
  70. mercado->telefono = (char *) malloc(sizeof(char) * 15);
  71.  
  72. printf("Nombre: ");
  73. gets(mercado->nombre);
  74. printf("Direccion: ");
  75. gets(mercado->direccion);
  76. printf("Telefono: ");
  77. gets(mercado->telefono);
  78.  
  79. mercado->c->nombrec = (char *) malloc(sizeof(char) * 20);
  80. mercado->c->apellidoc = (char *) malloc(sizeof(char) * 20);
  81. mercado->c->cedulac = (char *) malloc(sizeof(char) * 15);
  82. mercado->c->telefonoc = (char *) malloc(sizeof(char) * 15);
  83.  
  84. printf("Informacion del Coordinador\n\n");
  85. printf("\tNombre: ");
  86. gets(mercado->c->nombrec);
  87. printf("\tApellido: ");
  88. gets(mercado->c->apellidoc);
  89. printf("\tCedula: ");
  90. gets(mercado->c->cedulac);
  91. printf("\tTelefono: ");
  92. gets(mercado->c->telefonoc);
  93.  
  94. return mercado;
  95. }
  96.  
  97. void Imprimir_Mercado(Mercados *mercado){
  98. printf("\n\tMercado Municipal: %s\n\n", mercado->nombre);
  99.  
  100. printf("Direccion: %s\tTelefono: %s\n\n",
  101.       mercado->direccion, mercado->telefono);
  102.  
  103. printf("Datos del Coordinador:\n\n");
  104. printf("%s %s\tCedula: %s\n",
  105.       mercado->c->nombrec, mercado->c->apellidoc,
  106.   mercado->c->cedulac);
  107.    printf("Telefono: %s\n\n", mercado->c->telefonoc);
  108. }


Título: Re: Estructuras Anidadas, dudas
Publicado por: ivancea96 en 9 Febrero 2020, 00:16 am
El Coordinador "c" es también un puntero, así que hay que inicializarlo con memoria:
Código
  1. mercado->c = (...) malloc(...);