Bonsoir
En effet j'ai un petit problème j'arrive pas a coder une gestion de mot de passe avec getch(); je voudrais que le mot de passe soit une chaine de caractère mais je n'arrive qu'a stocker qu'un caractère.
Merci D'avance pour vos réponses
Bonsoir
En effet j'ai un petit problème j'arrive pas a coder une gestion de mot de passe avec getch(); je voudrais que le mot de passe soit une chaine de caractère mais je n'arrive qu'a stocker qu'un caractère.
Merci D'avance pour vos réponses
Salut,En un mot, c'est normal, vu que getch() est une fonction qui n'est prévue que pour lire un seul caractère à la fois... Il devient difficile d'espérer en obtenir plusieurs dans de telles conditions (du moins, sans passer par une boucle) .
Notes au passage que
- la fonction getch() n'est pas une fonction C++, mais bien une fonction C
- la fonction getch() n'est absolument pas standard, même en C et est donc à considérer comme "non portable".
Le gros problème, c'est qu'il n'existe de toutes manières rien de standard pour éviter l'affichage des caractères saisis au travers de std::cin
La seule solution que j'aie trouvée jusqu'à présent qui puisse éviter le recours à getch ressemble à quelque chose comme
Ce n'est toujours pas standard, vu que l'on manipule directement l'API système, mais c'est quand même beaucoup plus correct que l'utilisation de getch
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 #include <iostream> #include <string> #ifdef WIN32 #include <windows.h> #else #include <termios.h> #include <unistd.h> #endif void setStdinEcho(bool enable = true) { #ifdef WIN32 HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); DWORD mode; GetConsoleMode(hStdin, &mode); if( !enable ) mode &= ~ENABLE_ECHO_INPUT; else mode |= ENABLE_ECHO_INPUT; SetConsoleMode(hStdin, mode ); #else struct termios tty; tcgetattr(STDIN_FILENO, &tty); if( !enable ) tty.c_lflag &= ~ECHO; else tty.c_lflag |= ECHO; (void) tcsetattr(STDIN_FILENO, TCSANOW, &tty); #endif } int main() { std::string password; setStdinEcho(false); std::cout<<"introduisez votre mot de passe (il sera caché):"; std::cin>>password; std::cout<<"\nvous avez introduit "<<password<<std::endl; setStdinEcho(); std::cout<<"maintenant la saisie apparait a l'écran"<<std::endl <<"reintroduisez votre mot de passe pour\n " <<"le voir apparaitre :"; std::cin>>password; return 0; }
Merci merci merci koala01
je vais me donner a fond pour comprendre ton code
Merci beaucoup
A vrai dire, à part les #ifdef #else #endif, je crois qu'il ne sert pas à grand chose d'essayer de comprendre.
En gros, si tu es sous windows, il faut veiller à inclure le fichier windows.h afin de pouvoir profiter de l'API de window et jouer avec GetConsoleMode, SetConsoleMode et autre HANDLE.
Si tu es sous linux, il faut inclure le fichier d'en-tête termios.h afin de pouvoir jouer avec tcgetattr, tcsetattr et autres termios.
Une fois que cette fonction est codée, tu la places dans ta boite à outils personnelle et tu te dépêches de l'oublier (du moins, d'en oublier le code) jusqu'à la prochaine fois où tu seras confronté à un problème similaire .
Merci Merci vrement koala01
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager