Empécher l'utilisateur d'appuyer sur certaines touches

hitachicm615 Messages postés 8 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 29 avril 2009 - 15 déc. 2008 à 16:43
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 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 ...

On peut faire ca ?

Merci

4 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
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
0
hitachicm615 Messages postés 8 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 29 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;
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
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
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 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

switch (choixmenu)
...
___________________________________________________________
Magicalement
Nono
0
Rejoignez-nous