Empécher l'utilisateur d'appuyer sur certaines touches
hitachicm615
Messages postés8Date d'inscriptionsamedi 6 décembre 2008StatutMembreDernière intervention29 avril 2009
-
15 déc. 2008 à 16:43
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011
-
17 déc. 2008 à 01:44
Bonjour,
J'ai un menu dans mon programme en C et l'utilisateur doit choisir entre 1 et 6.
Si l'utilisateur tape un"A" ou un autre caractère qui n'est pas 1 et 6 ce dernier caractère ne s'affiche pas.
En quelques sorte, je veux obliger l'utilsateur à taper entre 1 et 6 mais lorsqu'il tape un b par exemple rien ne s'affiche, c'est comme si on bloquai toutes les autres touches à par 1,2,3 ...
Pistol_Pete
Messages postés1054Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 16 déc. 2008 à 14:24
Salut
Tu peux jouer avec kbhit et getch pour y arriver. Voici un petit exemple.
#include <conio.h>
int main()
{
int c;
printf("Appuyer sur un chiffre de 1 a 9\n");
do
{
kbhit(); //Une touche a été appuyé
c=getch(); //On recupère la touche appuyé
if(c>=48 && c<=57) //On test si c'est un chiffre
printf("%i\n",c-48); //Si oui on l'affiche
}
while(c<48 || c>57);
}
A+
________________________________________________________________________________
Mon site internet : http://ImAnalyse.free.fr
hitachicm615
Messages postés8Date d'inscriptionsamedi 6 décembre 2008StatutMembreDernière intervention29 avril 2009 16 déc. 2008 à 16:16
Ok, mais j'ai un problème j'entre un chiffre entre 1 et 6
Mais dérrière j'ai un switch et il ne le prend pas en compte, je met n'importe quel chiffre et il rentre dans le case 1, ne demande pas les pseudo de jeu et ca fait des signes bizarres.
Voici mon code :
do
{
kbhit(); //Une touche a été appuyé
choixmenu=getch(); //On recupère la touche appuyé
if(choixmenu>=49 && choixmenu<=54)//On test si c'est un chiffre
{printf("%d\n",choixmenu-48); //Si oui on l'affiche
choixmenu = choixmenu-48;
}
}
while(choixmenu<49 || choixmenu>54);
// Switch qui permet la selection du mode de jeu dans le menu principale
switch (choixmenu)
{
case 1: //Mode 1VS1 joueur contre joeur
system("cls");
printf("\n\n\t\tJoueur 1, tapez votre pseudo de jeu : ");
scanf("%s", &pseudo1);
printf("\n\n\t\tVotre pseudo a bien ete enregistre.\n\n\n\n\n\n\n\n\n\n\n", pseudo1);
printf("\t\tJoueur 2, tapez votre pseudo de jeu : ");
scanf("%s", &pseudo2);
printf("\n\n\t\tVotre pseudo a bien ete enregistre.\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t%s et %s BONNE CHANCE !!!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", pseudo1, pseudo2);
system("PAUSE");
break;
Pistol_Pete
Messages postés1054Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 16 déc. 2008 à 18:42
Il faudrait apprendre à utiliser les debuggeur. C'est très simple et rapide.
Tu verrais qu'il ne faut pas faire choixmenu = choixmenu-48; dans la boucle while. Comment tu peux sortir de cette boucle si tu changes la valeur avant le test.
Faut mettre choixmenu = choixmenu-48; après la boucle while.
A+
_____________________________________________________________________________
Mon site internet : http://Imnalyse.free.fr
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 17 déc. 2008 à 01:44
exact, où sortir du while avec un break apres ton traitement spécifique.
pareillement, le if est inutil, vu que c'est exactement le test inverse...
donc
do
{
kbhit(); //Une touche a été appuyé
choixmenu= getch(); // recup touche appuyé e
}
while(choixmenu<49 || choixmenu>54);
// ASSERT (choixmenu> =49 && choixmenu<=54)
//ie : c'est un chiffre
choixmenu -= 48;// modif de la valeur ascii en valeur décimale
printf("%d\n",choixmenu); //Si oui on l'affiche
// Switch qui permet la selection du mode de jeu dans le menu principale