C++ - Autoriser que la saisie d'un chiffre

Diminux Messages postés 1 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 28 juin 2009 - 28 juin 2009 à 15:01
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 30 juin 2009 à 20:41
Bonjour à tous,

Comme le titre du topic l'indique, je cherche à n'autoriser que la saisie d'un chiffre (et donc interdire les lettres).

Merci d'avance pour votre aide !

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 juin 2009 à 21:10
La saisie OK, mais où s'effectue cette saisie ???

Réponse Windows:
Sur un EDIT, tu sousclasses et tu traites WM_CHAR.

ciao...
BruNews, MVP VC++
0
sollen9 Messages postés 3 Date d'inscription mardi 30 juin 2009 Statut Membre Dernière intervention 8 juillet 2009
30 juin 2009 à 14:33
pas besoin de sous-classer, la saisie masquée est incluse dans les api shell non documentées (appel par numéro ordinal, tout est géré avec tooltip et tout)
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
30 juin 2009 à 17:45
Bienvenue,

Effectivement, faudrait préciser le contexte (GUI ou console ? Quel système d'exploitation ? Si GUI quelle bibliothèque ?).

Une solution pour du C++/console. N'est pas standard car utilise conio.h pas toujours disponible. Il n'y a pas de solution standard pour lire un caractère sans que "Entrée" soit pressée. Donc la vérification ne peut se faire qu'après coup... Dommage.
Les flèches ne fonctionnent pas, et le rendu du backspace est pas top mais bon.
<hr size="2" width="100%" />#include
#include <string>
#include <conio.h>

using namespace std;

#define CTRL_C_CHAR 3
#define ENTER_CHAR 13
#define BACKSPACE_CHAR 8

int main()
{
  char c;
  string result;

  cout << "Tapez un nombre :" << endl;
  c = getche();

  while ((c != ENTER_CHAR) && (c != CTRL_C_CHAR))
  {
    if (((c >= '0') && (c <= '9')) || (c == BACKSPACE_CHAR))
      result.append(1, c);
    c = getche();
  }

  if (c == ENTER_CHAR)
    cout << endl << "Vous avez tapez : "" << result << """ << endl;
  return 0;
}
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
30 juin 2009 à 18:09
[private joke pour sollen9]
"appel par numéro ordinal"
Rooooooh... Pour quelqu'un qui prône le professionnalisme, je te trouve bien taquin.
joke pour sollen9
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 juin 2009 à 20:41
On y gagnerait quoi à appeler des fonctions non documentées ???
Le sous classement n'est rien d'autre qu'un changement d'adresse de la procédure réceptrice des events system et c'est parfaitement documenté et donc gage de pérennité, faire dans l'exotique n'apportera aucune plus value.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous