Estoy usando estructuras anidadas y asignación de memoria dinámica y tengo problemas.
Estoy usando la siguiente entrada:
ID de miembro: 1
Nombre de miembro: A
Número de póliza: 1
ID de póliza: P1
Tipo de póliza: 1
Prima de póliza: 100
Sin embargo, no puedo ingresar nada más después de ingresar a P1. El programa termina.
El otro problema que tengo es que cuando selecciono la opción 2, que se supone que imprime todos los miembros, no se muestra correctamente.
Incluso antes de ingresar los detalles del miembro, si elijo la opción 2, muestra lo siguiente:
ID de miembro: 0
Nombre de miembro:
Me pregunto si al crear la matriz dinámica, cometí un error y en realidad está imprimiendo el miembro [0]. Después de agregar miembros a la matriz, luego de elegir la opción 2, imprime:
ID de miembro: 1
Nombre de miembro: A
ID de póliza: (nulo)
Tipo de póliza: Premium: $ 100
Imprime los detalles del miembro, pero cuando se trata de acceder a la política de ese miembro, esos detalles no se imprimen y omite por completo el tipo de política.
typedef struct member {
int id;
char name[30];
int polnum;
struct policy {
char id[4];
enum enumtype type;
int premium;
}pol;
}mem;
Puede tener n
miembros y cada miembro puede tener polnum
políticas, pero eso no es lo que dice esta estructura. Esta estructura dice que cada miembro tiene una política que está representada por una estructura anidada. Sus realloc
miembros externos de mantenimiento en una matriz restringen el espacio de la solución. En realidad, no podemos hacer eso y usar una estructura elástica al mismo tiempo, así que no tengo que entrar en cómo. Hacemos esto de la manera que ya sabes.
typedef struct struct policy {
char id[4];
enum enumtype type;
int premium;
} pol;
typedef struct member {
int id;
char name[30];
int polnum;
pol *policies;
}mem;
Agregar políticas es así:
if (member.polnum > 0) {
member.pol = malloc(member.polnum * sizeof(pol));
printf("\nEnter policy details for %s", member.name);
for (i = 0; i < member.polnum; i++) {
//...
scanf("%d", &member.pol[i].type);
//...
}
} else {
member.pol = NULL; // When you go to write the free memory code you will thank me
}
En el miembro de impresión, tenemos una construcción muy similar:
for (j = 0; j < member[i].polnum; j++) {
printf("\nPolicy ID: %s", member[i].pol[j].type);
Nota administrativa: el código se eliminó de la pregunta tras la publicación de la respuesta.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras