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

Signaler
Messages postés
8
Date d'inscription
samedi 6 décembre 2008
Statut
Membre
Dernière intervention
29 avril 2009
-
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
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

Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
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
Messages postés
8
Date d'inscription
samedi 6 décembre 2008
Statut
Membre
Dernière intervention
29 avril 2009

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;
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
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
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
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