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í:
while((conf != 'S') || (conf != 'N') || (conf != 's') || (conf != 'n'))
{
printf("Desea realizar una operacion? - S/N\n");
scanf("%c", &conf);
}
Hola creo que no es nesesario que pongas la N ni la n
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
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
#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;
}
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?
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.
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
Debes cambiar los or(||) por and (&&) asi si una se cumple se hace falso y sale del while.
Saludos
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.
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