[C con Clase] 1 lista dentro de otra lista
Toni
tsptoni en gmail.com
Sab Abr 10 03:09:19 CEST 2010
hola, estoy aprendiendo a usar C++ y estoy atascado en una práctica.
Después de estar ya un par de horas buscando por donde falla mi código, ya
lo localicé, y al parecer el void AlmacenarCiudad no funciona correctamente,
ya que no escribe en el nodo el nombre de la ciudad,
lo deja en nulo como podeis ver a continuacion.
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
typedef struct nodo* T_persona;
struct nodo{
T_persona pers;
string nombre;
};
typedef struct nodo1* T_ciudad;
struct nodo1{
T_ciudad sig;
T_persona per;
string ciutat;
};
void Destruir (T_ciudad& datos){
}
void Inicializar (T_ciudad& datos){
if (datos!=NULL){
Destruir (datos);
system("PAUSE");
cout<<"llega 1";
}
else{
datos = NULL;
system("PAUSE");
cout<<"llega 2";
}
}
void Imprimir (T_ciudad& datos){
system("PAUSE");
cout<<"llega 1";
//prueba para confirmar que siempre le llega la lista en nulo
if (datos==NULL){
cout<<"la lista es nula!!";
}
//parece que el imprimir funciona, pero la lista siempre llega en nulo,
parece fallo de AlmacenarCiudad
if (datos!=NULL){
system("PAUSE");
cout<<"llega 2";
T_ciudad aux;
T_persona aux2;
aux=datos;
system("PAUSE");
cout<<"llega 3";
while (aux!=NULL){
system("PAUSE");
cout<<"llega 4";
aux2=aux->per;
cout<<aux->ciutat<<" ";
while (aux2!=NULL){
system("PAUSE");
cout<<"llega 5";
cout<<aux2->nombre<<" ";
aux2=aux2->pers;
}
system("PAUSE");
cout<<"llega 6";
cout<<endl;
aux=aux->sig;
}
}
system("PAUSE");
cout<<"llega fin";
}
void AlmacenarCiudad (T_ciudad& datos, const string& ciudad, bool& ok){
T_ciudad aux;
ok=false;
aux=datos;
/* if (datos==NULL){
datos=new nodo1;
datos->ciutat=ciudad;
datos->sig=NULL;
aux=datos;
}*/
while (aux!=NULL){ //no consigo que escriba el nombre de la
ciudad...
if (aux->sig->ciutat==ciudad){
ok=true;
}
aux=aux->sig;
}
if (aux==NULL){
aux = new nodo1;
aux->ciutat=ciudad;
aux->sig=NULL;
}
if (ok==true){ //true y false funcionan correctamente
cout<<"La ciudad ya existe"<<endl<<endl;
}
else{
cout<<"La ciudad se anadio correctamente"<<endl<<endl;
}
}
void AlmacenarPersona (T_ciudad& datos, const string& ciudad, const string&
persona, bool& ok){
}
T_persona BuscarPersona (T_ciudad& datos, const string& ciudad, const
string& persona){
}
char menu()
{
char opcion;
cout << endl;
cout << "Opciones: " << endl<<endl;
cout << "A: Inicializar " << endl;
cout << "B: Imprimir la estructura" << endl;
cout << "C: Destruir todo(Borrar)" << endl;
cout << "D: Crear una ciudad nueva" << endl;
cout << "E: Añadir una persona a una ciudad" << endl;
cout << "F: Buscar a una persona en una determinada ciudad" << endl;
cout << "X: Para finalizar el programa" << endl<<endl;
do {
cin >> opcion;
opcion = toupper(opcion);
} while (!((opcion == 'X') || (('A' <= opcion) && (opcion <= 'F'))));
return opcion;
}
int main ()
{
char opcion;
string ciudad,persona;
bool ok;
T_ciudad datos = NULL;
do {
opcion = menu();
switch (opcion) {
case 'A': Inicializar(datos);
break;
case 'B': Imprimir(datos);
break;
case 'C': Destruir(datos);
break;
case 'D': cout << "Introduzca una ciudad: " ;
cin >> ciudad;
AlmacenarCiudad(datos,ciudad,ok);
break;
case 'E': cout<<"Introduzca el nombre de la ciudad: "<<endl;
cin>>ciudad;
cout<<"Introduzca el nombre de la persona: ";
AlmacenarPersona(datos,ciudad,persona,ok);
break;
case 'F': cout << "Introduzca el nombre de la ciudad: "
<<endl;
cin >> ciudad;
cout<<"Introduzca el nombre de la persona: ";
cin>>persona;
T_persona PuntPersona;
BuscarPersona(datos,ciudad,persona);
break;
}
}while (opcion != 'X');
system ("PAUSE");
return 0;
}
Muchas gracias,
Saludos,
Antonio.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100410/e53ba612/attachment.html>
Más información sobre la lista de distribución Cconclase