Aprendiendo C,help! Bucle while[?]

Iniciado por Centmare, 14 Enero 2012, 04:06 AM

0 Miembros y 1 Visitante están viendo este tema.

Centmare

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.

x64core

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 :)

Centmare

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?

rir3760

Correcto.

La expresión:
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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Centmare

Bien, duda resuelta.
Gracias a los dos. Supongo que el hilo ya esta listo para cierre.

Hasta la proxima :)