hola a todos, tengo un problema con el codigo de un metodo de una clase porque si encuentra el elemento buscado pero no lo borra estoy usando clases a lo cual mando a enlistar una determinada estructura tal vez me podrían ayuda porque despues de llamar al metodo borrar no borra el elemento que coincide con la busqueda....!
//la estructura es
struct protesis{
char codigo_prot[15];//guarda codigo de protesis
int tipo_protesis; //guarda el tipo de protesis
char fecha_ingreso[12]; //guarda fecha de ingreso
int edad_disenho; //edad para la que fue disenhada
};
//npnodo es un puntero de la clase nodo que estoy utilizando
//de la lista tengo punteros primero5 y actual5;
//el metodo borrar es
void lista::Borrar(int edad, int tipo) {
npnodo anterior, nodo;
nodo = primero5;
anterior = NULL;
if(primero5!=NULL){
while(nodo!=NULL){
if(nodo->valor.edad_disenho==edad && nodo->valor.tipo_protesis==tipo){
if(nodo==primero5){
primero5=primero5->siguiente;
}//del tercer if
else{
anterior->siguiente=nodo->siguiente;
}//del else
delete(nodo);
}//del segundo if
anterior=nodo;
nodo=nodo->siguiente;
}//del while
}//del primer if
else{
cout<<"\n\tLista vacia"; getch();
}
if(primero5!=NULL)
{
while(nodo!=NULL)
{
if(nodo->valor.edad_disenho==edad && nodo->valor.tipo_protesis==tipo)
{
if(nodo==primero5)
primero5=primero5->siguiente;
else
anterior->siguiente=nodo->siguiente;
delete(nodo);
}
anterior=nodo;
nodo=nodo->siguiente;
}
}
Después de "delete(nodo)" el código continúa su ejecución y se encuentra con:
* "anterior=nodo" ya vamos mal asignando direcciones que están borradas
* "nodo=nodo->siguiente" Esto es aún peor...
Te falta un break después de "delete nodo" para salir del algoritmo de búsqueda y evitar que el código haga "cosas raras"
se me habia olvida el pedazo de codigo de donde le mando a llamar
void lista::Buscar(pacientes datos){
npnodo aux;
int band=0, salir=0;
char opcion; //para capturar la decision del usuario
aux=primero5;
while(aux!=NULL){
if(aux->valor.edad_disenho==datos.edad && aux->valor.tipo_protesis==datos.tipo_protesis)//al presionar que si
//la quiero reservar me da error en esta linea dice desbordamientod de pila
{
cout<<"\n\n\tLa protesis "<<aux->valor.codigo_prot<<" esta disponible";
//bucle para obtener la decision del usuario
do{
gotoxy(10,15);cout<<"Desea utilizarla? (S/N) ";
do{
opcion=toupper(getch());
}while(!isalpha(opcion));
cout<<opcion;
if(opcion=='N'||opcion=='S')salir=1;
else salir=0;
}while(salir!=1);
if(opcion=='S'){dat_reservados.encolar(aux->valor,datos);
cout<<"edad"<<aux->valor.edad_disenho<<endl;
cout<<"tipo"<<aux->valor.tipo_protesis<<endl;
getch();
Borrar(aux->valor.edad_disenho,datos.tipo_protesis); //aqui no se si llama asi o con el nombre del tipo de lista,
// pero al ejecutar me da desboramiento de la pila en la linea
//donde esta el if que busca la coincidencia de los datos
}
band=1;
getch();
}//del if
aux=aux->siguiente;
}//del while
if(band==0){
cout<<"\n\n\tNo hay protesis disponible";
getch();
}
}