Hola, resultado que tengo que realizar un programa con una estructura, por ejemplo, que almacene los datos de una persona, lo tipico, el nombre, DNI, y fecha de nacimiento, digamos, que el máximo son 5 personas:
struct T_datos_personales
{
string nombre;
string DNI;
string fecha_nacimiento;
};
[code]
hasta aqui todo bien, ahora dicho registro, lo almaceno en un vector de 5 elementos, por ejemplo si lo hago con un for(); me pedira los datos de las 5 personas consecutivamente
int main()
{
T_datos_personales personas[5];
int opciones = 0;
do{
cout<<"Mostrar los datos personales (pulsa 1)"<<endl;
cout<<"Añadir persona(pulsa 2)"<<endl;
cin>>opciones;
switch( opciones)
case 1:
{
for(int i = 0; i < 5; i++)
{
cout<<"Nombre: "<<personas[i].nombre<<endl;
cout<<"DNI: "<<personas[i].DNI<<endl;
cout<<"Fecha de nacimiento: "<<personas[i].fecha_nacimiento<<endl;
}
break;
}
case 2:
{
}
}while(opciones != 6);
}
y en el case 2 es donde tengo un problema, por ejemplo, si pongo un for() como en el case 1, con sus cin correspondientes, me pedirá los datos de las 5 personas consecutivamente, pero mi idea es, que se añade de la persona, sale del case 2, y vuelva al menú de las opciones...en este caso..¿como hago para saber que posicion del vector esta libre, para no sobreescribir los datos, y se añadan correspondientemente?
gracias y disculpen por el tocho
[/code]
if(personas[i].nombre=="") //Vacío
No sé si es lo que buscabas. Sinó, puedes agregarle a la estructura un "bool definido" o "bool libre".
Cita de: ivancea96 en 20 Abril 2014, 18:30 PM
if(personas[i].nombre=="") //Vacío
No sé si es lo que buscabas. Sinó, puedes agregarle a la estructura un "bool definido" o "bool libre".
no creo que sea eso, no se si me he explicado bien, es decir, si eliges el case 2, añades los datos de una persona, una vez añadidos, sale del case, y vuelve al menú de opciones, o bien para mostrar los datos de la persona/as añadidas o añadir otra persona, buscando por ahí me han dicho ...si guardas en una variable el lugar siguiente a la última persona que añadiste la vez anterior... menudo lio
Haz un array de punteros, si una posicion vale NULL quiere decir que esta vacia. Solo tienes que crear una nueva estructura con new.
Para borrar algo parecido, se borra con delete y se pone el puntero a NULL.
Cita de: amchacon en 20 Abril 2014, 18:50 PM
Haz un array de punteros, si una posicion vale NULL quiere decir que esta vacia. Solo tienes que crear una nueva estructura con new.
Para borrar algo parecido, se borra con delete y se pone el puntero a NULL.
puff no tengo tanto nivel para usar array de punteros XD
Cita de: holamega12 en 20 Abril 2014, 18:42 PMbuscando por ahí me han dicho ...si guardas en una variable el lugar siguiente a la última persona que añadiste la vez anterior
Junto con el array declaras una variable para el numero de personas introducidas, esta tambien indica la siguiente posicion libre:
int main()
{
T_datos_personales personas[5];
int num_personas = 0;
int opciones = 0;
// ...
case 2:
// Se agrega una persona solo si num_personas es menor que cinco ...
// Se actualiza el contador de personas
num_personas++;
// ...
Un saludo
Cita de: rir3760 en 20 Abril 2014, 19:45 PM
Junto con el array declaras una variable para el numero de personas introducidas, esta tambien indica la siguiente posicion libre:
int main()
{
T_datos_personales personas[5];
int num_personas = 0;
int opciones = 0;
// ...
case 2:
// Se agrega una persona solo si num_personas es menor que cinco ...
// Se actualiza el contador de personas
num_personas++;
// ...
Un saludo
muchas gracias a todos, ya funciona correctamente.