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

Signaler
Messages postés
1
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
28 juin 2009
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
3
Date d'inscription
mardi 30 juin 2009
Statut
Membre
Dernière intervention
8 juillet 2009

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)
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
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;
}
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
[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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++