hola, estoy aprendiendo a usar C++ y estoy atascado en una práctica.<div><br></div><div>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, </div>
<div>lo deja en nulo como podeis ver a continuacion.</div><div><br></div><div><div>#include <iostream></div><div>#include <cstdlib></div><div>#include <string></div><div>using namespace std;</div><div><br>
</div><div>typedef struct nodo* T_persona;</div><div> struct nodo{</div><div> T_persona pers;</div><div> string nombre;</div><div> };</div><div> </div><div><br></div><div>
typedef struct nodo1* T_ciudad;</div><div> struct nodo1{</div><div> T_ciudad sig;</div><div> T_persona per;</div><div> string ciutat;</div><div> };</div><div> </div>
<div> </div><div> </div><div> </div><div> </div><div>void Destruir (T_ciudad& datos){</div><div> </div><div> } </div><div><br></div><div>void Inicializar (T_ciudad& datos){</div>
<div> if (datos!=NULL){</div><div> Destruir (datos);</div><div> system("PAUSE");</div><div> cout<<"llega 1";</div><div> }</div><div> else{ </div><div> datos = NULL;</div>
<div> system("PAUSE");</div><div> cout<<"llega 2";</div><div> }</div><div> </div><div> }</div><div> </div><div>void Imprimir (T_ciudad& datos){</div><div> system("PAUSE");</div>
<div> cout<<"llega 1";</div><div> //prueba para confirmar que siempre le llega la lista en nulo </div><div> if (datos==NULL){</div><div> cout<<"la lista es nula!!";</div>
<div> }</div><div> //parece que el imprimir funciona, pero la lista siempre llega en nulo, parece fallo de AlmacenarCiudad</div><div> if (datos!=NULL){</div><div> system("PAUSE");</div>
<div> cout<<"llega 2"; </div><div> T_ciudad aux;</div><div> T_persona aux2;</div><div> aux=datos;</div><div> system("PAUSE");</div><div> cout<<"llega 3";</div>
<div> while (aux!=NULL){</div><div> system("PAUSE");</div><div> cout<<"llega 4";</div><div> aux2=aux->per;</div><div> cout<<aux->ciutat<<" ";</div>
<div> while (aux2!=NULL){ </div><div> system("PAUSE");</div><div> cout<<"llega 5"; </div><div> cout<<aux2->nombre<<" ";</div>
<div> aux2=aux2->pers;</div><div> }</div><div> system("PAUSE");</div><div> cout<<"llega 6";</div><div> cout<<endl; </div><div> aux=aux->sig; </div>
<div> } </div><div> } </div><div> system("PAUSE");</div><div> cout<<"llega fin"; </div><div> }</div><div> </div><div><br></div><div> </div><div>void AlmacenarCiudad (T_ciudad& datos, const string& ciudad, bool& ok){</div>
<div> </div><div> T_ciudad aux;</div><div> ok=false;</div><div> aux=datos; </div><div> /* if (datos==NULL){</div><div> datos=new nodo1;</div><div> datos->ciutat=ciudad;</div>
<div> datos->sig=NULL;</div><div> aux=datos;</div><div> }*/</div><div> while (aux!=NULL){ //no consigo que escriba el nombre de la ciudad...</div><div> if (aux->sig->ciutat==ciudad){</div>
<div> ok=true; </div><div> }</div><div> aux=aux->sig; </div><div> }</div><div> if (aux==NULL){</div><div> aux = new nodo1; </div>
<div> aux->ciutat=ciudad;</div><div> aux->sig=NULL; </div><div> }</div><div> </div><div> if (ok==true){ //true y false funcionan correctamente</div><div> cout<<"La ciudad ya existe"<<endl<<endl; </div>
<div> }</div><div> else{</div><div> cout<<"La ciudad se anadio correctamente"<<endl<<endl; </div><div> }</div><div> }</div><div> </div><div>void AlmacenarPersona (T_ciudad& datos, const string& ciudad, const string& persona, bool& ok){</div>
<div> </div><div> }</div><div> </div><div>T_persona BuscarPersona (T_ciudad& datos, const string& ciudad, const string& persona){</div><div> </div><div> }</div><div><br></div><div><br></div><div><br></div>
<div><br></div><div>char menu()</div><div>{</div><div> char opcion;</div><div> cout << endl;</div><div> cout << "Opciones: " << endl<<endl;</div><div> cout << "A: Inicializar " << endl;</div>
<div> cout << "B: Imprimir la estructura" << endl;</div><div> cout << "C: Destruir todo(Borrar)" << endl;</div><div> cout << "D: Crear una ciudad nueva" << endl;</div>
<div> cout << "E: Añadir una persona a una ciudad" << endl;</div><div> cout << "F: Buscar a una persona en una determinada ciudad" << endl;</div><div> cout << "X: Para finalizar el programa" << endl<<endl;</div>
<div> do {</div><div> cin >> opcion; </div><div> opcion = toupper(opcion);</div><div> } while (!((opcion == 'X') || (('A' <= opcion) && (opcion <= 'F'))));</div>
<div> return opcion;</div><div>}</div><div><br></div><div>int main ()</div><div>{ </div><div> char opcion;</div><div> string ciudad,persona;</div><div> bool ok;</div><div> T_ciudad datos = NULL;</div>
<div> </div><div> </div><div> do {</div><div> opcion = menu();</div><div> switch (opcion) {</div><div> case 'A': Inicializar(datos);</div><div> break;</div>
<div> case 'B': Imprimir(datos);</div><div> break;</div><div> case 'C': Destruir(datos);</div><div> break; </div><div>
case 'D': cout << "Introduzca una ciudad: " ;</div><div> cin >> ciudad;</div><div> AlmacenarCiudad(datos,ciudad,ok);</div><div>
break;</div><div> case 'E': cout<<"Introduzca el nombre de la ciudad: "<<endl;</div><div> cin>>ciudad;</div><div> cout<<"Introduzca el nombre de la persona: ";</div>
<div> AlmacenarPersona(datos,ciudad,persona,ok);</div><div> break;</div><div> case 'F': cout << "Introduzca el nombre de la ciudad: " <<endl;</div>
<div> cin >> ciudad;</div><div> cout<<"Introduzca el nombre de la persona: ";</div><div> cin>>persona;</div><div> T_persona PuntPersona;</div>
<div> BuscarPersona(datos,ciudad,persona);</div><div> break;</div><div> }</div><div> }while (opcion != 'X');</div><div><br></div><div>system ("PAUSE");</div>
<div>return 0;</div><div>}</div></div><div><br></div><div>Muchas gracias,</div><div>Saludos,</div><div>Antonio.</div>