Bloquear la entrada de caracteres en C
renaudh
Mensajes publicados
143
Fecha de registro
Estado
Miembro
Última intervención
-
Vercors -
Vercors -
Hola,
Me gustaría saber cómo bloquear la entrada de caracteres en un programa en C.
Ya tengo este bucle:
que vuelve a pedir la columna mientras el carácter introducido no está entre 1 y 7, y lo que me gustaría es que los caracteres incorrectos no aparezcan en pantalla, es decir, bloquear el teclado para que el usuario solo pueda introducir caracteres entre 1 y 7.
Gracias por vuestra ayuda.
Me gustaría saber cómo bloquear la entrada de caracteres en un programa en C.
Ya tengo este bucle:
while ((c<49)||(c>55)) //49= código ASCII de 1 y 55=código ASCII de 7 { printf("%s, entra la columna\n",jugador1); //tanto si el jugador no introduce un carácter entre 1 y 7 inclusive, volvemos a pedir la entrada c=getche(); printf("\n"); } que vuelve a pedir la columna mientras el carácter introducido no está entre 1 y 7, y lo que me gustaría es que los caracteres incorrectos no aparezcan en pantalla, es decir, bloquear el teclado para que el usuario solo pueda introducir caracteres entre 1 y 7.
Gracias por vuestra ayuda.
13 respuestas
-
hola
reemplazarc=getche(); printf("\n");
porwhile((c=getche())<45 ||c>55); printf("%c\n",c);--
cordialmente
¤ -
En mi opinión, habría que buscar en las opciones echo/noecho del terminal (como para la entrada de contraseñas).
-
He intentado tu tratamiento blurk pero empeora, todavía puedo ingresar cualquier carácter y además ya no toma la entrada.
Para el echo/noecho, ¿estás seguro de que hablas del lenguaje C porque me suena a scripts? -
Te propongo esta modificación:
printf("%s, entrer la colonne\n",joueur1);
c=getch();
while ((c<49)||(c>55))
{
c=getch();
}
Debería funcionar. -
-
-
ok, si en un menú que contiene 4 opciones y debemos ingresar un número para acceder a una de ellas; digamos del 1 al 4 y A la variable que recibe el valor. es simple con un bucle while. Solo tenemos que decir
do
{
----------------------------------------------------
----------------------------------
}
while( A<=1 && A=>4);
pero si además debo evitar al mismo tiempo que el usuario introduzca letras del alfabeto, ¿qué hago?
y podría haber usado switch y default, pero quiero que el usuario siga teniendo el menú delante y vuelva a elegir.
-
-
Hola.
mira ahí https://en.cppreference.com/w/ sobre la E/S de C
prueba scanf("%[1234567]\n",&c);
o bien scanf("%c\x8",&c);
\x8 es el carácter de retroceso (borrado) código ASCII 8.
No garantizo nada, pero podría ser una idea.
si no, prueba ungetc
o aún:
c=getch();
if (c...) printf("%c",char(8));
--
Saludos! Cuando no sabes, ¡no toques nada!JBT
Char Snipeur -
- El código ASCII 8 corresponde a la flecha hacia la izquierda y no a backspace (127)
- A partir del momento en que se usa scanf, el control de la entrada solo se efectúa en el momento en que el usuario presiona la tecla de entrada.
Por lo tanto, es imposible evitar que se pulse un carácter desde esta función.
Las soluciones para este tipo de problema son del tipo while !kbhit() o getch() pero es de Borland y no está disponible en Unix -
No, 127, es borrar (DELETE) el que borra el carácter siguiente.
Véalo aquí:
https://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange
y aquí
https://en.cppreference.com/w/cpp/language/ascii
No logro hacer funcionar la cosa, pero debe ser factible en C++ con cin
--
¡Saludos! Cuando no sabes, ¡no toques nada!JBT
Char Snipeur -
<supr> elimina lo que está a la derecha del cursor, se encuentra en 2 ejemplares en los pad numéricos y de posicionamiento, backspace elimina lo que está a la izquierda del cursor, y está situado sobre la tecla de entrada. Se trata de backspace.
-
uh... blurk, isn’t that what I just said?
So we agree: 8 corresponds to backspace (left arrow) and 127 to delete (del or delete).
To delete a written character, I tested this and it works:
printf("->a\x8%c\x8",char(32));
this line writes "->a" then backspace moves the cursor back one position, char(32) (the space) erases 'a' from the screen, then we place the cursor behind '->' again with the \x8 command.
there you go, it doesn’t solve your problem, but it gives you an idea of what we can do with ASCII codes.
--
Best regards! Quand on sait pas, on touche pas !JBT
Char Snipeur -
hola francotirador
de hecho no del todo
8 es la flecha izquierda que no tiene valor de borrado
9 es la flecha derecha
backspace es como 8 pero con un borrado
supr es como un 9 con un borrado
además, atención es ASCII, con las páginas de códigos ya no funciona igual
el ASCII se detiene en 127 y más allá, cada idioma (o país) tiene su propio sistema de caracteres acentuados. (debajo de 32 que corresponde a la barra espaciadora, igual, cambia según la página de códigos)
sous Windows, lo que está debajo de 32 o más allá de 127 no se comporta igual que en un terminal Unix, o Minitel
en general, no va a funcionar igual bajo Windows y bajo Linux y en un Mac, porque el ASCII de hoy está cubierto por una capa de páginas de códigos.
intenta pulsar la tecla Alt, y al mismo tiempo escribes el código ASCII, y ahí ves lo que pasa
a+ -