<div>Muchas gracias David, consegui solucionarlo gracias a tu ayuda, lo que hice fue primero tratar el caso particular de que el primero sea nulo, y ya luego el resto del bucle tuve en cuenta lo que me dijiste, que mi puntero debia apuntar antes del nulo, sino es demasiado tarde. Así me quedo:</div>
<div><br></div><div><br></div><div><div>void AlmacenarCiudad (T_ciudad& datos, const string& ciudad, bool& ok){</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 el valor.</div>
<div>        aux=datos;     </div><div>        </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->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>           else{</div><div>              aux->sig = new nodo1;             </div><div>              aux->sig->ciutat=ciudad;</div>
<div>              aux->sig->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><br></div><div><br></div><div><br></div><div class="gmail_quote">
El 10 de abril de 2010 04:22, 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, estoy aprendiendo a usar C++ y estoy atascado en una práctica.<br>
<br>
Después de estar ya un par de horas buscando por donde falla mi<br>
código, ya lo localicé, y al parecer el void AlmacenarCiudad no<br>
funciona correctamente, ya que no escribe en el nodo el nombre de la<br>
ciudad, lo deja en nulo como podeis ver a continuacion.<br>
<br>
</blockquote>
<br></div>
[CORTE]<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
</blockquote>
<br>
Veamos solamente la función en cuestión.<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
void AlmacenarCiudad (T_ciudad& datos, const string& ciudad, bool& ok){<br>
                T_ciudad aux;<br>
        ok=false;<br>
        aux=datos;       /*      if (datos==NULL){<br>
        datos=new nodo1;<br>
        datos->ciutat=ciudad;<br>
        datos->sig=NULL;<br>
        aux=datos;<br>
        }*/<br>
        while (aux!=NULL){   //no consigo que escriba el nombre de la ciudad...<br>
           if (aux->sig->ciutat==ciudad){<br>
</blockquote>
<br></div>
No sabes si 'aux->sig' es un puntero válido. Por lo que veo, deberías comprobar 'aux->ciutat' y no la información del siguiente nodo.<br>
<br>
En segundo lugar, si ya hemos encontrado que la ciudad existe, entonces deberíamos terminar este bucle 'while' para no continuar. De esta manera, 'aux' apunta al nodo correcto. De lo contrario, 'aux' acabará siendo nulo, porque la lista está diseñada así: un puntero nulo al final.<div class="im">
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
              ok=true;                                   }<br>
           aux=aux->sig;           }<br>
          if (aux==NULL){<br>
              aux = new nodo1;                           aux->ciutat=ciudad;<br>
              aux->sig=NULL;                     }<br>
          if (ok==true){ //true y false funcionan correctamente<br>
     cout<<"La ciudad ya existe"<<endl<<endl;                }<br>
    else{<br>
       cout<<"La ciudad se anadio correctamente"<<endl<<endl;       }<br>
 }<br>
 <br>
</blockquote>
<br></div>
Si la ciudad no existe, creas un nuevo nodo, pero no enlazas ese nodo a la lista actual apuntada por 'datos'. Debes relacionar el nuevo nodo con los demás en la lista.<br>
<br>
En tu caso, debes guardar el puntero al último nodo, para poder modificar su puntero 'sig'. Tal y como implementas esta función, 'aux' llega a ser nulo, lo cual no ayuda si quieres modificar la lista original; es demasiado tarde.<br>

<br>
Sugiero que mantengas otro puntero al nodo anterior a 'aux'. Por ejemplo,<br>
<br>
ant = datos;<br>
aux = ant->sig;<br>
<br>
while( !aux && !ok )<br>
{<br>
  if( aux->ciutat == ciudad )<br>
    ok = true;<br>
<br>
  ant = aux;<br>
  aux = ant->sig;<br>
}<br>
<br>
if( !aux )<br>
{<br>
  // Reusamos 'aux'<div class="im"><br>
  aux = new nodo1;<br>
  aux->ciutat = ciudad;<br></div>
  aux->sig = 0;<br>
}<br>
<br>
ant->sig = aux;  // Enlazamos el nuevo nodo a la lista<br>
<br>
Este algoritmo sólo funciona si la lista tiene más de 2 nodos. Deberías tratar los casos particulares de una lista vacía o de un solo nodo.<br>
<br>
<br>
Espero que esto te oriente.<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>