Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Centmare en 14 Enero 2012, 04:06 am



Título: Aprendiendo C,help! Bucle while[?]
Publicado por: Centmare en 14 Enero 2012, 04:06 am
Buenas.
Actualmente estoy estudiando un ciclo medio(sistemas microinformaticos y redes), planeo seguir con el superior y a donde eso me lleve. Pero mientras tanto, tengo que aprovechar Ofimatica. Que mejor forma de hacerlo que aprender C.

Decidí embarcarme en un pequeño proyecto, estoy intentando hacer un pequeño juego en C, como una aventura grafica.... pero sin graficos. Aun se muy poco de programación, pero de este modo, eventualmente aprenderé.

El caso es que cuando compilo y ejecuto el codigo con dev-c++, se salta el while del final. No consigo figurarme el por qué, lo dejo en vuestras manos.

La trama se debe al alto numero de robos que ha habido en mi clase,sera divertido.

CODIGO: http://snipt.org/vgpS2

Consejos y material de lectura seran bienvenidos. Gracias!

PD: He visto el hilo con la lista de libros relacionados con el tema, pero agradeceria una recomendacion mas concreta,basada en experienca propia,no me veo capaz de elegir de una lista de titulos.


Título: Re: Aprendiendo C,help! Bucle while[?]
Publicado por: x64core en 14 Enero 2012, 10:02 am
recuerda que el while ejecuta las instrucciones que estan en el mientras la condicion sea verdadera o un valor distinto de 0.
recuerda que la funcion strcmp devuelve un valor distinto de 0 si las cadenas son diferentes en caso contrario devuelve 0.
y simplemente tu while no se ejecuta porque ninguna de las comparaciones de la cadena son iguales, si quitas el NOT se ejecutara
pero estarias haciendo que tu while se ejecutase mientras las cadenas son distintas osea que si detectan que son iguales
sale del while :)


Título: Re: Aprendiendo C,help! Bucle while[?]
Publicado por: Centmare en 14 Enero 2012, 15:54 pm
Se trata de que se ejecute lo del while hasta que las comparaciones sean iguales.

Segun lo que me has dicho el strcmp funciona igual que un !=, y no al contrario,como yo pensaba, por lo tanto entiendo que:

while (!(strcmp(Ohelipuerto,"helicoptero") || strcmp(Ahelipuerto,"entrar")))

ese while se ejecutaria mientras Ohelipuerto y Ahelipuerto NO sean desiguales a "helicoptero" y "entrar". Por eso, con la negacion no se me ejecutaba. Al quitar la negacion, pasa a ejecutarse cuando son desiguales, y sale del bucle cuando son iguales.

¿Alguien me confirma si estoy en lo cierto esta vez?


Título: Re: Aprendiendo C,help! Bucle while[?]
Publicado por: rir3760 en 14 Enero 2012, 18:05 pm
Correcto.

La expresión:
Código
  1. strcmp(Ohelipuerto,"helicoptero") || strcmp(Ahelipuerto,"entrar")
Resulta en 1 (verdadero) si cualquiera de las cadenas no coincide con la literal, solo resulta en 0 (falso) si ambas cadenas son iguales.

Al negarla mediante el operador '!' el bucle "while" se ejecutara solo mientras ambas cadenas coincidan.

Un saludo


Título: Re: Aprendiendo C,help! Bucle while[?]
Publicado por: Centmare en 14 Enero 2012, 18:30 pm
Bien, duda resuelta.
Gracias a los dos. Supongo que el hilo ya esta listo para cierre.

Hasta la proxima :)