Untitled
unknown
plain_text
3 years ago
2.8 kB
8
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...