Untitled
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...