[Resuelto] Problema con while (Loop)

Iniciado por jaxoR, 28 Abril 2014, 01:06 AM

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

jaxoR

Bueno, mi problema es que en esta sentencia se queda echo un loop, no importa si pongo S o N, repite infinitas veces lo mismo y no sale de ahí:

Código (cpp) [Seleccionar]
while((conf != 'S') || (conf != 'N') || (conf != 's') || (conf != 'n'))
   {
       printf("Desea realizar una operacion? - S/N\n");
       scanf("%c", &conf);
   }

nolasco281

#1
Hola creo que no es nesesario que pongas la N ni la n

Código (cpp) [Seleccionar]
while((conf != 'S') || (conf != 's'))
{
      printf("Desea realizar una operacion? - S/N\n");
      scanf("%c", &conf);
}


y cualquier letra distinta de S terminara el ciclo pudes probar. ya sea N o n.

ahora que me fijo si el usuario preciona s tiene que entrar si no tiene que salir

y tu primero debes de preguntar que desea hacer

ejemplo

Código (cpp) [Seleccionar]
printf("Desea realizar una operacion? - S/N\n");
      scanf("%c", &conf);

while((conf = 'S') || (conf = 's'))       //No recuerdo si es asi o
while((conf != 'S') || (conf != 's'))    //asi
{
    //Instruciones si es S
}
     //si es N continua nunca entra al while



aca esta tambien puedes usar un break para pararlo

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {

char conf;
cout << ("Desea realizar una operacion? - S/N\n");
cin >> conf;

while(conf == 'S' || conf == 's')
   {
      cout << "hola";
      break;
   }
return 0;
}

Lo que se puede imaginar... se puede programar.

jaxoR

No se supone que entra al while porque conf no tiene un valor igual a S o N? Y cuando se ingresa S o N sale del bucle?

nolasco281

while((conf != 'S') || (conf != 'N') || (conf != 's') || (conf != 'n'))

Cita de: wiD^ en 28 Abril 2014, 01:06 AM
Bueno, mi problema es que en esta sentencia se queda echo un loop, no importa si pongo S o N, repite infinitas veces lo mismo y no sale de ahí:

Claro segun entiendo yo le dice:

mientras conf !=  (<- negacion y asignacion) no sea S, s, n, N cualquier otra letra que tu pongas entrara al while

ya dentro del while te va a estar pidiendo esto infinitas veces por que nunca va salir

printf("Desea realizar una operacion? - S/N\n");
      scanf("%c", &conf);

recuerda que lo puedes controlar por centinela o por numero de veces que se repita.
Lo que se puede imaginar... se puede programar.

jaxoR

Claro pero porque cuando ingreso S y se almacena en conf, cuando va a comprobar el whiletendría que salir porque la variable tiene el valor S

noele1995

Debes cambiar los or(||) por and (&&) asi si una se cumple se hace falso y sale del while.

Saludos

vangodp

    while((conf != 'S') || (conf != 'N') || (conf != 's') || (conf != 'n'))
       {
           printf("Desea realizar una operacion? - S/N\n");
           scanf("%c", &conf);
       }

analicemos esto =D
(conf != 'S') || (conf != 'N') || (conf != 's') || (conf != 'n')

a ver... while necesita una condición verdadera para entrar en el bucle, vamos a ver si se da dicha condición...

Lo que intentas colar a while es(conf != 'S') || (conf != 'N') || (conf != 's') || (conf != 'n')...
que en lenguaje humano seria algo como:
mientras (conf no sea igual 'S') o (conf no sea igual 'N') o (conf no sea igual 's') o (conf no sea igual 'n') sera verdadero.

O sea que si conf tiene alguna de las letras n,N,s,S es falso por que lo que dices es que si conf es diferente de ellas sera verdad.
Ya falla la lógica
Para entrar en el bucle necesita ser verdad.

La mas lógica seria...

(conf == 's' || conf == 'S') || ( conf != 'n' || conf  != 'N' )

Esa seria la condición si la cabeza no me falla XDD

mientras (conf es igual a s o S sera verdad) o (conf sea diferente de n o N sera verdad).

si conf == n o N se rompe el bucle por que no debe ser igual según hemos dicho antes

interpretar el código bien te va ayudar mucho.


jaxoR

Cita de: noele1995 en 28 Abril 2014, 01:55 AM
Debes cambiar los or(||) por and (&&) asi si una se cumple se hace falso y sale del while.

Saludos

Ahora funciona perfecto. Gracias a todos