Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: petrusqui en 4 Mayo 2012, 17:26 pm



Título: Duda con operados lógico y Do...While
Publicado por: petrusqui en 4 Mayo 2012, 17:26 pm
Buenas,

Tengo una duda con los operadores && y ||. Por ejemplo:

1.
Código
  1. do
  2. {
  3.  
  4. }while ((cerrar_ventana != 'N') || (cerrar_ventana != 'n'))

Este ejemplo tendria que evaluar cada uno de los operandos, mientras que uno de los dos sea verdadero se continuaria realizando el bucle.

2.
Código
  1. do
  2. {
  3.  
  4. }while ((cerrar_ventana != 'N') && (cerrar_ventana != 'n'))

Este ejemplo tendria que evaluar cada uno de los oprandos, si los dos operandos dan como resultado verdadero se continuaria realizando el bucle.


Pues en hacer el programa me pasa justo lo contrario. ¿Mi duda lo que he dicho arriba esta bien o no? dejo como ejemplo este que es muy sencillo:
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(int argc, char const *argv[])
  5. {
  6. char cerrar_ventana = 's'; //Pide al usuario si desea cerrar la ventana
  7.  
  8. do
  9. {
  10.                cout << "Ejemplo" << endl;
  11. cout << "Deseas realizar otra operación (S/N): ";
  12. cin >> cerrar_ventana;
  13. system("CLS");
  14.  
  15. } while (cerrar_ventana != 'N' && cerrar_ventana != 'n');
  16. return 0;
  17. }


Saludos, petrusqui.


Título: Re: Duda con operados lógico y Do...While
Publicado por: Ferno en 4 Mayo 2012, 19:44 pm
Lo que dijiste es correcto.
¿Qué programa no te funciona?


Título: Re: Duda con operados lógico y Do...While
Publicado por: durasno en 4 Mayo 2012, 19:51 pm
Hola! el primero esta bien, si cerrar_ventana es 'N' ó 'n' va a continuar en el bucle
El segundo siempre va a ser falso, ya que con el && estas haciendo que cerrar_ventana sea 'N' y 'n' pero es una variable, no puede tomar dos valores al mismo tiempo

Y en el programa a q te referis que hace lo contrario?? Para mi esta bien, si ingresas 'S' o 's' el bucle se sigue realizando, pero si ingresas 'N' o 'n' termina el programa

Por ahi te confundis xq justo tu variable se llama cerrar_ventana y lo que qres hacer es q cuando diga 'S' se cierre el programa...Generalmente la condicion se hace asi:
Código
  1. do
  2. {
  3.  
  4. }while ((continuar == 'S') || (continuar == 's'))// continua mientras sea 'S' o 's'

Saludos


Título: Re: Duda con operados lógico y Do...While
Publicado por: petrusqui en 5 Mayo 2012, 00:48 am
Perdonad, me habia equivocado con los dos códigos del principio.

Y ya lo entendí, esqeu a veces llego a ser cortito jaja Como ponia solo una 'n' continuava siendo cierto ya que 'n' es diferente a 'N' y por eso si pongo && como un operndo es falso todo es falso y se para el bucle. Bueno, almenos he visto el error.


Gracias y saludos :D


Título: Re: Duda con operados lógico y Do...While
Publicado por: s00rk en 5 Mayo 2012, 02:21 am
Usa si deceas la funcion tolower() , asi tu while seria solamente asi:

Código
  1. while (tolower(cerrar_ventana) != 'n');