Pregunta

Quiero utilizar la función getch para obtener un carácter ... De modo que el usuario sólo puede entrar en S o N Carácter .. pero el bucle while no funciona ... necesito ayuda! Gracias

#include <stdio.h>
main(){
   char yn = 0; 
   printf("\n\t\t  Save changes? Y or N [ ]\b\b");
   yn = getch();
   while (yn != 'Y' || yn != 'y' || yn != 'N' || yn != 'n') {   //loop is not working
         yn = getch();
   }  
   if (yn=='Y' || yn=='y') printf("Yehey"); 
   else printf("Exiting!");  
   getch();
}
¿Fue útil?

Solución

yn != 'Y' || yn != 'y' || yn != 'N' || yn != 'n'

Es necesario utilizar && en lugar de || aquí. Digamos que usted ha entrado en 'Y'. Así primera prueba in! = 'Y' es falsa, pero segunda prueba in! = 'Y' es verdadera. Por lo que la condición es verdadera, ya que están a OR. Es por eso que está entrando en el bucle de nuevo.

Otros consejos

¿Quieres decir que no && ||.

La variable "in" es un carácter. Para que la expresión para evaluar a falso, que carácter tendría que ser Y, Y, n, y n simultáneamente, lo cual es imposible.

Necesita:

while(yn != 'y' && yn != 'Y' && yn != 'n' && yn != 'N')

La lógica de la sentencia while es defectuoso, es necesario lógica AND (&&) en lugar del operador lógico OR (||).

Además, este sería un buen lugar para hacer uso {...} while ();

La condición para el bucle while es OR anidados. Para que funcione es posible que desee cambiarlos por AND:

do {
   yn = getch()
} while(yn != 'Y' && yn != 'y' && yn != 'N' && yn != 'n');
//use of getch() function
#include<iostream.h>
#include<conio.h>
//main function starts excuition
viod main()
{
clrscr();//to clear the screen
//veriable decleration
int a;//Any integer
int b;//Any integer
int c;//Any integer
cout<<"Enter the first number\n";//prompt
cin>>a;//read the integer
cout<<"Enter the second number\n";//prompt
cin>>b;//read integer
c = a + b;//the value of xum of "a" and "b" is assigned to "c"
cout<<"sum is\t"<<c;
getch();//to stay the screen
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top