Untitled

 avatar
unknown
plain_text
2 years ago
2.8 kB
5
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char casa[20];
}Casas;

typedef struct {
    char name[20];
    char surname[20];
    int ncasas;
    Casas *casas;
}Persona;

void nuevasCasas(Persona **persona, int extra, int pos) {

    Casas *aux;

    printf("Direccion de memoria de aux: %p", &aux);

    aux = (Casas*) malloc(sizeof(Casas)* ((*persona)[pos].ncasas + extra));

    for(int i = 0; i < ((*persona)[pos].ncasas+extra); i++) {
        if(i < (*persona)[pos].ncasas) {
            //strcpy(aux[i].casa, (*persona)[pos].casas[i].casa); //Copiamos solo la string CASA
            aux[i] = (*persona)[pos].casas[i]; //Copiamos toda la estructura CASAS DE GOOOOLPE
        } else {
            printf("Casa %d: ", i+1);
            scanf("%s", aux[i].casa);
        }

    }

    free((*persona)[pos].casas);
        
    (*persona)[pos].ncasas += extra; // es lo mismo que (*persona)[pos].ncasas = (*persona)[pos].ncasas + extra;
    (*persona)[pos].casas = aux;

}

int main() {

    Persona *personas;
    int inicial = 0;
    int extra = 0;

    printf("Cuantas personas iniciales? ");
    scanf("%d", &inicial);

    personas = (Persona *) malloc(inicial * sizeof(Persona));

    for(int i = 0; i < inicial; i++) {
        printf("\nNombre %d: ",i+1);
        scanf("%s", personas[i].name);
        printf("Apellido %d: ",i+1);
        scanf("%s", personas[i].surname);
        printf("Cuantas casas tiene %s %s? ", personas[i].name, personas[i].surname);
        scanf("%d", &personas[i].ncasas);
        personas[i].casas = (Casas *) malloc(personas[i].ncasas * sizeof(Casas));
        for(int j = 0; j < personas[i].ncasas; j++) {
            printf("Casa %d: ", j+1);
            scanf("%s", personas[i].casas[j].casa);
        }
    }

    for(int i = 0; i < inicial; i++) {
        printf("\nNombre %d: %s\n",i+1, personas[i].name);
        printf("Apellido %d: %s\n",i+1, personas[i].surname);
        printf("Casas %d:\n",i+1);
        for(int j = 0; j < personas[i].ncasas; j++) {
            printf("\t-- %s\n", personas[i].casas[j].casa);
        }
    }

    
    for(int i = 0; i < inicial; i++) {
        printf("Nuevas casas para %s %s: ", personas[i].name, personas[i].surname);
        scanf("%d", &extra);
        nuevasCasas(&personas, extra, i);
    }

    printf("\n\nUPDATED\n\n");


    for(int i = 0; i < inicial; i++) {
        printf("\nNombre %d: %s\n",i+1, personas[i].name);
        printf("Apellido %d: %s\n",i+1, personas[i].surname);
        printf("Casas %d:\n",i+1);
        for(int j = 0; j < personas[i].ncasas; j++) {
            printf("\t-- %s\n", personas[i].casas[j].casa);
        }
    }

    for(int i = 0; i < inicial; i++) {
        free(personas[i].casas);
    }

    free(personas);

    return 0;
}
Editor is loading...