Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: #Aitor en 28 Julio 2013, 18:24 pm



Título: C++ While (No consigo salir del ciclo)
Publicado por: #Aitor en 28 Julio 2013, 18:24 pm
Bueno, pues como dice el titulo, algo sucede, que no consigo salir del ciclo

Código
  1. cout << endl << "Escriba /help si necesitas ayuda." << endl;
  2.  
  3. string help;
  4.  
  5. cin >> help;
  6.  
  7. while (help != "/help" || "/informacion" || "/automatico" || "/console"){
  8. cout << endl << help << " no se conoce como un parametro." << endl;
  9. cin >>  help;
  10. }
  11.  
  12. if(help == "/help"){
  13. cout << endl << "- Comandos básicos - " << endl;
  14. cout << "---------------------" << endl;
  15. cout << "/automatico Este comando hará el calculo automáticamente y de forma simple." << endl;
  16. cout << "/console Este comando hará el calculo mediante parámetros. "  << endl;
  17. cout << "/informacion Este comando proporcionará información del creador." << endl;
  18.  
  19. }else if(help == "/informacion"){
  20. cout << "Programa creado por aitor. Gracias por utilizar el programa." << endl;
  21.  
  22. }else{
  23.  
  24. cout << "No funciona" << endl; }
  25.  

Se supone que si escribes algo diferente de esos 4 "parámetros" entras en un ciclo, que te advierte, que no se conoce dicho parámetro, y te vuelve a pedir que escribas bien lo que querías escribir, el problema está que al escribir /help /informacion /atuomatico /console , no sale del ciclo y sigue advirtiendo de que dicho parámetro no se conoce....

Gracias de antemano.


Título: Re: C++ While (No consigo salir del ciclo)
Publicado por: Oblivi0n en 28 Julio 2013, 18:36 pm
sintaxis de un while: while(condicion), lo que en tu caso se puede desgranar en : while (condicion OR condicion OR condicion OR ....)

Tu has puesto while(condicion OR literal OR literal ...)

Código
  1. while (help != "/help" || help != "/informacion" || help != "/automatico" ||  help != "/console"){
  2.  


Título: Re: C++ While (No consigo salir del ciclo)
Publicado por: #Aitor en 28 Julio 2013, 18:50 pm
sintaxis de un while: while(condicion), lo que en tu caso se puede desgranar en : while (condicion OR condicion OR condicion OR ....)

Tu has puesto while(condicion OR literal OR literal ...)

Código
  1. while (help != "/help" || help != "/informacion" || help != "/automatico" ||  help != "/console"){
  2.  
Perdona, no te sigo, realmente acabo de "empezar" y ando haciendo pruebas a mansalva.

¿A qué te refieres con condicion || literal?

Gracias de antemano.


EDITO:


Vale, ya leí en msdn a que se refiere con literal, y ya vi el fallo, perdona la molestia!

muchas gracias...!


RE EDITO:


con;

Código
  1.  
  2. while (help != "/help" || help != "/informacion" || help != "/automatico" ||  help != "/console"){
  3. cout << endl << help << " no se conoce como un parametro." << endl;
  4. cin >>  help;
  5. }
  6.  

No salta el ciclo, pero con

Código
  1. while (help != "/help"){
  2. cout << endl << help << " no se conoce como un parametro." << endl;
  3. cin >>  help;
  4. }
  5.  

Si lo hace, y sigo sin ver el problema.


RE RE EDITO (QUE PESADITO SOY)

Lo solucioné cambiando el || por &&  aunque no comprendo porque no funciona de la otra forma...

Código
  1. while (help != "/help" && help != "/informacion"){
  2. cout << endl << help << " no se conoce como un parametro." << endl;
  3. cin >>  help;
  4. }
  5.  

¡Gracias! y si alguien podría darme una explicación de porque or no sirve pero and si, se lo agradecería mucho.

¡Un saludo!


Título: Re: C++ While (No consigo salir del ciclo)
Publicado por: amchacon en 28 Julio 2013, 20:41 pm
Lo solucioné cambiando el || por &&  aunque no comprendo porque no funciona de la otra forma...

Código
  1. while (help != "/help" && help != "/informacion"){
  2. cout << endl << help << " no se conoce como un parametro." << endl;
  3. cin >>  help;
  4. }
  5.  

¡Gracias! y si alguien podría darme una explicación de porque or no sirve pero and si, se lo agradecería mucho.

¡Un saludo!
El operador || sería valido si estuvieras comprobando una igualdad.

Pero estás descartando posibilidades, asi que tienes que descartarlas todas uniendolas con el operador &&


Título: Re: C++ While (No consigo salir del ciclo)
Publicado por: zonahurbana en 29 Julio 2013, 00:01 am
Puedes leerlo en lenguaje humano como: "mientras sea diferente de... y diferente de... y diferente de..."
Es decir, si es diferente de cualquiera de esas palabras van a continuar las iteraciones.

Si usas el operador lógico OR jamás acabaría porque... ser diferente de X o de Y siempre se cumplirá.
Sea cual fuere la entrada, dicha condición siempre será verdadera... porque para ser falsa tendría que ingresarse algo que sea igual a X y Y simultáneamente y eso es imposible porque X y Y son distintos y una expresión (o una variable) no puede tener 2 valores a la vez.