<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
hola como puedo para ver este foro <br>y poder comentar en el. y tambien quiero pedir ayuda para trabajar con x++<br><br>> Date: Fri, 9 Apr 2010 22:22:09 -0400<br>> From: srd4121@njit.edu<br>> To: cconclase@listas.conclase.net<br>> Subject: Re: [C con Clase] 1 lista dentro de otra lista<br>> <br>> Hola Toni,<br>> <br>> Toni wrote:<br>> > 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>> <br>> [CORTE]<br>> <br>> > <br>> <br>> Veamos solamente la función en cuestión.<br>> <br>> > void AlmacenarCiudad (T_ciudad& datos, const string& ciudad, bool& ok){<br>> >         <br>> >         T_ciudad aux;<br>> >         ok=false;<br>> >         aux=datos;     <br>> >   /*      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 <br>> > ciudad...<br>> >            if (aux->sig->ciutat==ciudad){<br>> <br>> No sabes si 'aux->sig' es un puntero válido. Por lo que veo, deberías <br>> 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 <br>> deberíamos terminar este bucle 'while' para no continuar. De esta <br>> manera, 'aux' apunta al nodo correcto. De lo contrario, 'aux' acabará <br>> siendo nulo, porque la lista está diseñada así: un puntero nulo al final.<br>> <br>> >               ok=true;                       <br>> >             }<br>> >            aux=aux->sig;  <br>> >          }<br>> >           if (aux==NULL){<br>> >               aux = new nodo1;             <br>> >               aux->ciutat=ciudad;<br>> >               aux->sig=NULL;           <br>> >           }<br>> >        <br>> >    if (ok==true){ //true y false funcionan correctamente<br>> >      cout<<"La ciudad ya existe"<<endl<<endl;            <br>> >     }<br>> >     else{<br>> >        cout<<"La ciudad se anadio correctamente"<<endl<<endl;  <br>> >      }<br>> >  }<br>> >  <br>> <br>> Si la ciudad no existe, creas un nuevo nodo, pero no enlazas ese nodo a <br>> la lista actual apuntada por 'datos'. Debes relacionar el nuevo nodo con <br>> los demás en la lista.<br>> <br>> En tu caso, debes guardar el puntero al último nodo, para poder <br>> modificar su puntero 'sig'. Tal y como implementas esta función, 'aux' <br>> llega a ser nulo, lo cual no ayuda si quieres modificar la lista <br>> 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'<br>>    aux = new nodo1;<br>>    aux->ciutat = ciudad;<br>>    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 <br>> 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 Cconclase@listas.conclase.net<br>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net<br>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ<br>                                    <br /><hr />Discover the new Windows Vista <a href='http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE' target='_new'>Learn more!</a></body>
</html>