Código C:
Ver original
void ShowMejorVendedor() { DIR *id_dir; struct dirent *filedir; FILE *archivoVendedor; char pathFile[SIZE_FULL_PATH_FILE]; unsigned long i,x; Lista *Ranking,*InitDir=NULL,*nuevo_elemento,*actual,*siguiente,aux; if((id_dir=opendir(".\\Vendedores\\"))==NULL){ }else{ while((filedir = readdir(id_dir)) != NULL){ if(archivoVendedor!=NULL){ //Creo una lista enlazada simple con todos los vendedores break; }else{ nuevo_elemento->sig = NULL; if(InitDir==NULL){ Ranking=nuevo_elemento; InitDir=Ranking; }else{ Ranking->sig=nuevo_elemento; Ranking=Ranking->sig; } }else{ break; } } }else{ break; } } } closedir(id_dir); } //Ordeno por ventas de mayor a menor actual=InitDir; while(actual != NULL && actual->sig != NULL) { siguiente = actual->sig; while(siguiente!=NULL) { if(actual->Vendedor.contadorventas < siguiente->Vendedor.contadorventas) { actual->Vendedor.ID = siguiente->Vendedor.ID; actual->Vendedor.contadorventas = siguiente->Vendedor.contadorventas; siguiente->Vendedor.ID = aux.Vendedor.ID; siguiente->Vendedor.contadorventas = aux.Vendedor.contadorventas; } siguiente = siguiente->sig; } actual = actual->sig; siguiente = actual->sig; } actual=InitDir; if(actual != NULL){ while(actual != NULL){ actual=actual->sig; } } //Libero la memoria de la lista enlazada de los vendedores Ranking=InitDir; while(InitDir != NULL){ InitDir=Ranking->sig; Ranking=InitDir; } }
Realmente he probado a guardar las direcciones de los miembros anteriores, intercambiaba las direcciones de actual->sig y siguiente->sig y luego intercambiaba las de anteriorActual->sig y anteriorSiguiente->sig (siempre que hubiese un anterior claro) pero no lo logré. ¿alguien puede ayudarme con esto? Es algun problema con punteros y no me entero de como hacerlo .