Bloquer la saisie de caractères en C
renaudh
Messages postés
138
Date d'inscription
Statut
Membre
Dernière intervention
-
Vercors -
Vercors -
Bonjour,
J'aimerais savoir comment bloquer la sasie de caractères dans un programme C.
J'ai déjà cette boucle:
qui redemande d'entrer la colonne tant que le caractère entré n'est pas compris entre 1 et 7 et ce que je voudrais, c'est que les mauvais caractères n'apparaissent pas à l'écran donc bloquer le clavier pour que l'utilisateur ne puisse rentrer que des caractères entre 1 et 7.
Merci pour votre aide.
J'aimerais savoir comment bloquer la sasie de caractères dans un programme C.
J'ai déjà cette boucle:
while ((c<49)||(c>55)) //49=code ascii du 1 et 55=code ascii du 7 { printf("%s, entrer la colonne\n",joueur1); //tant que le joueur n'entre pas un caractère entre 1 et 7 inclus, on recommence la saisie c=getche(); printf("\n"); }
qui redemande d'entrer la colonne tant que le caractère entré n'est pas compris entre 1 et 7 et ce que je voudrais, c'est que les mauvais caractères n'apparaissent pas à l'écran donc bloquer le clavier pour que l'utilisateur ne puisse rentrer que des caractères entre 1 et 7.
Merci pour votre aide.
A voir également:
- Bloquer la saisie de caractères en C
- Saisie gestuelle iphone - Guide
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Bloquer pub youtube - Accueil - Streaming
- Saisie vocale whatsapp - Accueil - Messagerie instantanée
13 réponses
bonjour
rempacer
par
cordialement
¤
rempacer
c=getche(); printf("\n");
par
while((c=getche())<45 ||c>55); printf("%c\n",c);--
cordialement
¤
A mon avis, il faudrait chercher du côté des options echo/noecho du terminal (comme pour la saisie des mots de passe).
J'ai essayé ton traitement blurk mais ça fait bien pire, jpeux toujours rentrer n'importe kel caractère et en plus, il ne prend même plus la saisie.
Pour le echo/noecho, t'es sûr que tu parle du langage c car ça me fait penser à des scripts ça!
Pour le echo/noecho, t'es sûr que tu parle du langage c car ça me fait penser à des scripts ça!
Moi je te propose cette modif :
printf("%s, entrer la colonne\n",joueur1);
c=getch();
while ((c<49)||(c>55))
{
c=getch();
}
Ca devrait marcher.
printf("%s, entrer la colonne\n",joueur1);
c=getch();
while ((c<49)||(c>55))
{
c=getch();
}
Ca devrait marcher.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ok, si dans un menu contenant 4 options et on doit entrer un chiffre pour acceder avec a l'une d'elle; disons de 1 a 4 et A la variable ki recoit la valeur. c'est simple avec une boucle while. On a qu'a dire
do
{
----------------------------------------------------
----------------------------------
}
while( A<=1 && A=>4);
mais si je dois aussi empecher en meme temps que l'utilisateur rentre des lettres de l'alphabet qu'est ce que je fais?
et j'aurai pu utiliser switch et default mais je veux que l'utilisateur ait encore le menu devant lui et de refaire le choix.
do
{
----------------------------------------------------
----------------------------------
}
while( A<=1 && A=>4);
mais si je dois aussi empecher en meme temps que l'utilisateur rentre des lettres de l'alphabet qu'est ce que je fais?
et j'aurai pu utiliser switch et default mais je veux que l'utilisateur ait encore le menu devant lui et de refaire le choix.
Salut.
regarde là https://en.cppreference.com/w/ sur le C I/O
essai scanf("%[1234567]\n",&c);
ou alors scanf("%c\x8",&c);
\x8 est le caratère pour backspace (effacement) code ascii 8.
Je garantie rien, mais ça peut être une idée.
sinon, essai ungetc
ou encore :
c=getch();
if (c...) printf("%c",char(8));
regarde là https://en.cppreference.com/w/ sur le C I/O
essai scanf("%[1234567]\n",&c);
ou alors scanf("%c\x8",&c);
\x8 est le caratère pour backspace (effacement) code ascii 8.
Je garantie rien, mais ça peut être une idée.
sinon, essai ungetc
ou encore :
c=getch();
if (c...) printf("%c",char(8));
-le code ascii 8 correspond à la flèche vers la gauche et non à backspace (127)
-à partir du moment où on utilise scanf,le contrôle de la saisie ne s'effectue qu'au moment où l'utilisateur appuye sur la touche d'entrée.
Il est donc impossible d'empêcher qu'un caractère soit tapé à partir de cette fonction.
Les solutions pour ce genre de problème sont du type while ! kbhit() ou getch () mais c'est du borland et ça n'est pas disponible sous unix
-à partir du moment où on utilise scanf,le contrôle de la saisie ne s'effectue qu'au moment où l'utilisateur appuye sur la touche d'entrée.
Il est donc impossible d'empêcher qu'un caractère soit tapé à partir de cette fonction.
Les solutions pour ce genre de problème sont du type while ! kbhit() ou getch () mais c'est du borland et ça n'est pas disponible sous unix
Non, 127, c'est supprision (DELETE) qui eface le caractère suivant.
Voir là :
https://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange
et là
https://en.cppreference.com/w/cpp/language/ascii
Je n'arrive pas à lfaire fonctionner le truc,mais ça doit être fesable en C++ avec cin
Voir là :
https://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange
et là
https://en.cppreference.com/w/cpp/language/ascii
Je n'arrive pas à lfaire fonctionner le truc,mais ça doit être fesable en C++ avec cin
<supr> suprime ce qui est à droite du curseur, se trouve en 2 exemplaires sur les pavés numériques et de positionement, back space supprime ce qui est à gauche du curseur, et est situé au dessus de la touche d'entrée. C'est bien de backspace qu'il s'agit.
⌂
⌂
heu... blurk, c'est pas ce que je viens de dire ?
Donc on est daccord : 8 correspond à backspace (fleche gauche) et 127 à delete (suppr ou supprime).
Pour supprimer un caractère ecrit, j'ai testé ça et ça fonctionne :
printf("->a\x8%c\x8",char(32));
cette ligne écrit "->a" puis bacspace fait revenir le curseur en arrière d'une case, char(32) (l'espace) efface 'a' de l'écran, puis on replace le curseur derrière '->' par la commande \x8.
voila, ça résoud pas ton pb, mais ça te donne une idée de ce que l'on peut faire avec les codes ascii.
Donc on est daccord : 8 correspond à backspace (fleche gauche) et 127 à delete (suppr ou supprime).
Pour supprimer un caractère ecrit, j'ai testé ça et ça fonctionne :
printf("->a\x8%c\x8",char(32));
cette ligne écrit "->a" puis bacspace fait revenir le curseur en arrière d'une case, char(32) (l'espace) efface 'a' de l'écran, puis on replace le curseur derrière '->' par la commande \x8.
voila, ça résoud pas ton pb, mais ça te donne une idée de ce que l'on peut faire avec les codes ascii.
salut sniper
en fait pas tout à fait
8 c'est la flèche gauche qui n'a pas de valeur d'effacement
9 c'est pour la flèche droite
backspace c'est comme 8 mais avec un effacement
suppr c'est comme un 9 avec un effacement
en plus, attention c'est de l'ascii, avec les pages de codes ça ne marche plus pareil
l'ascii s'arête à 127 et au delà, chaque langue (ou pays ) a son propre système de caractères accentués. (en desous de 32 qui correspond à la barre espace, pareil, ça change selon la page de codes)
sous windows, ce qui est en dessous de 32 ou au delà de 127 ne se comporte pas pareil que dans un terminal unix, ou minitel
en gros, ça va pas faire pareil sous windows et sous linux et sur un mac, parceque l'ascii de nos jours, il est recouvert par une couche de pages de codes.
essaye d'appuyer sur la touche alt, et en même temps tu tapes le code ascii, et là tu vois ce que ça fait
a+
en fait pas tout à fait
8 c'est la flèche gauche qui n'a pas de valeur d'effacement
9 c'est pour la flèche droite
backspace c'est comme 8 mais avec un effacement
suppr c'est comme un 9 avec un effacement
en plus, attention c'est de l'ascii, avec les pages de codes ça ne marche plus pareil
l'ascii s'arête à 127 et au delà, chaque langue (ou pays ) a son propre système de caractères accentués. (en desous de 32 qui correspond à la barre espace, pareil, ça change selon la page de codes)
sous windows, ce qui est en dessous de 32 ou au delà de 127 ne se comporte pas pareil que dans un terminal unix, ou minitel
en gros, ça va pas faire pareil sous windows et sous linux et sur un mac, parceque l'ascii de nos jours, il est recouvert par une couche de pages de codes.
essaye d'appuyer sur la touche alt, et en même temps tu tapes le code ascii, et là tu vois ce que ça fait
a+