Muchas gracias David, al final de mucho pensar mas tu ayuda logre que funcione perfectamente:<div><br></div><div><div>void AlmacenarCiudad (T_ciudad& datos, const string& ciudad, bool& ok){</div><div>        </div>
<div>        //La primera vez que añado una ciudad, siempre dice que ya existe, luego ya funciona </div><div>        //correctamente, si existe, avisa y no la añade, si no existe, la añade y da mensaje afirmativo.</div><div>
        // (SOLUCIONADO)</div><div>        </div><div>        T_ciudad aux;</div><div>        ok=false; //inciamos en false para decir que no hubo cambio, por lo cual se añadio bien, sino es asi, cambiara a true.</div><div>
        aux=datos;     </div><div>        </div><div>        </div><div>        if (datos!=NULL){      </div><div>        while ((aux->sig!=NULL) && (aux->ciutat!=ciudad)){  </div><div>          </div><div>           aux=aux->sig;  </div>
<div>         }</div><div>          if (aux->ciutat==ciudad){</div><div>              ok=true;  //la ciudad ya existe </div><div>                                  </div><div>           }</div><div>           if (aux->ciutat!=ciudad){</div>
<div>              aux->sig = new nodo1;             </div><div>              aux->sig->ciutat=ciudad;</div><div>              aux->sig->sig=NULL;           </div><div>          }</div><div>          } </div>
<div>          else{</div><div>            datos=new nodo1;</div><div>            datos->ciutat=ciudad;</div><div>            datos->sig=NULL;</div><div>            aux=datos;</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>     system("PAUSE");</div><div> }</div><div><br></div><div><br></div><div>y el otro quedo asi: </div><div><br></div><div><div>void AlmacenarPersona (T_ciudad& datos, const string& ciudad, const string& persona, bool& ok){</div>
<div>      </div><div>     if (datos!=NULL){</div><div>       T_ciudad aux;</div><div>       T_persona aux2;</div><div>       aux=datos;</div><div>       ok=false;</div><div>       </div><div>         while ((aux->sig!=NULL)&&(aux->ciutat!=ciudad)){</div>
<div>           aux=aux->sig;   </div><div>       //    system("PAUSE");            </div><div>           }</div><div>        if (aux->ciutat==ciudad){</div><div>          ok=true;</div><div>      </div><div>
             if(aux->per!=NULL){</div><div>               aux2=aux->per;</div><div>               aux->per=new nodo;</div><div>               aux->per->nombre=persona;</div><div>               aux->per->pers=aux2; </div>
<div>        //          cout<<"bucle persona2";</div><div>        //          system("PAUSE");</div><div>              }</div><div>             if (aux->per==NULL){</div><div>             aux->per=new nodo;</div>
<div>             aux2=aux->per;</div><div>             aux2->nombre=persona;</div><div>             aux2->pers=NULL;</div><div>             aux->per=aux2;                            </div><div>             }                                           </div>
<div>         }</div><div>                         //Si introduzco una ciudad que no existe para almacenar una persona</div><div>                         //en lugar de decir que no encontro la ciudad, el programa da error...  </div>
<div>                         // (SOLUCIONADO)                              </div><div>         if (ok==false){</div><div>           cout<<"No se ha encontrado la ciudad, no se almaceno la persona"<<endl;             </div>
<div>          }</div><div>         if (ok==true){</div><div>           cout<<"Se almaceno correctamente"<<endl;            </div><div>          }</div><div>                      </div><div>      }</div>
<div>     system("PAUSE");</div><div> }</div><div> </div></div><div><br></div><div>Muchas gracias!</div><br><div class="gmail_quote">El 10 de abril de 2010 22:23, Steven Davidson <span dir="ltr"><<a href="mailto:srd4121@njit.edu">srd4121@njit.edu</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hola Toni,<div class="im"><br>
<br>
Toni wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hola buenas tardes,<br>
<br>
He escrito un programa para un trabajo, y me ocurren 2 pequeños<br>
errores.<br>
El programa en sí funciona, salvo los 2 errores que ahora explico:<br>
<br>
El primero es que cuando almaceno una ciudad, lo hace correctamente<br>
pero da el mensaje "La ciudad ya existe", aun asi la añade, y las<br>
posteriores ciudades que añado funciona correctamente, es decir, si<br>
la ciudad realmente existe, dara el aviso y no la añadira, y si no se<br>
encuentra en la lista, la añade y da el mensaje "añadido<br>
correctamente".<br>
<br>
</blockquote>
<br></div>
Esto ocurre porque realizas el bucle 'while' tanto si la lista 'datos' estaba originalmente vacía o no. Date cuenta que la primera sentencia 'if' trata el caso particular de una lista vacía. Su consecuencia es que agregas el nodo a 'datos' y por tanto, no necesitas hacer nada más. Deberías terminar de inmediato. El esquema del programa sería:<br>

<br>
// Caso particular: lista vacía => 0 nodos<br>
if( !datos )<br>
{<br>
  ...<br>
}<br>
else  // Caso general: lista existente => > 0 nodos<br>
{<br>
  ...<br>
}<br>
<br>
if( ok ) { ... }<br>
else { ... }<br>
<br>
<br>
De hecho, no necesitas usar 'aux' en el caso particular de una lista vacía.<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
El segundo error es cuando quiero almacenar a una persona, si añado<br>
una persona a una ciudad existente, lo hace bien y da el aviso<br>
"añadido correctamente", en cambio, si digo que añada a una persona a<br>
una ciudad que no se encuentra en la lista, el programa en vez de<br>
decir que no existe tal ciudad, lo que hace es dar un error y se<br>
cierra.<br>
<br>
</blockquote>
<br></div>
En primer lugar, si la lista está vacía, no sabemos el valor de 'ok'. Deberías asginar un valor inicial a 'ok'. Por ejemplo,<br>
<br>
ok = false;<br>
<br>
if( !datos )<br>
{<br>
  ...<br>
}<br>
<br>
if( ok )  ...<br>
else  ...<br>
<br>
En segundo lugar, al terminar el bucle 'while', inmediatamente accedes al miembro 'ciutat' apuntado por 'aux'. Sin embargo, no tienes en cuenta la posibilidad de que 'aux' sea nulo. Si se da este caso, entonces el acceso es denegado y lógicamente el sistema operativo te dará un error.<br>

<br>
Tienes que comprobar que 'aux' es un puntero válido antes de intentar usarlo. Por ejemplo,<br>
<br>
while( ... )  {...}<br>
<br>
if( aux )  // Si 'aux' es válido, entonces 'aux->ciutat == ciudad'<br>
{<br>
  ok = true;<br>
  ...<br>
}<br>
<br>
Por último, no veo que sea necesario usar 'aux2' en el caso de que la ciudad no contenga ninguna persona. Como 'aux->per' es nulo, el primer nodo que creamos va a ser el único nodo que va a tener a estas alturas.<br>

<br>
<br>
Espero que todo esto te sea de ayuda.<br>
<br>
Steven<br>
<br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</blockquote></div><br></div>