bonjour a tous je veux bien savoir comment masquer la saisie d'une zone texte du genre :
printf("LOGIN : ");gets(login);
printf("PASSWORD : ");gets(pass);
merci d'avance
![]()
bonjour a tous je veux bien savoir comment masquer la saisie d'une zone texte du genre :
printf("LOGIN : ");gets(login);
printf("PASSWORD : ");gets(pass);
merci d'avance
![]()
Envoyé par khedji
Déjà, il ne faut pas utiliser gets().
Ensuite, il n'y a pas de solution standard. Il y a bien getpass() qui est assez portable, mais, à ma connaissance, déprécié, car pas très sûr. Il y a peut être un équivalent plus récent que je ne connais pas.
Une version pour les sytèmes Unix (donc non portable)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 printf("Mot de passe :"); fflush(stdout); system("stty -echo"); fgets(buffer, sizeof buffer, stdin); system("stty echo"); /* verification de la saisie */
Skyrunner meri mais ça n'a pas marché Emmanuel Delahaye merci pour ton idee de getpass ça marche comme ça :
1_ declarer un pointeur sur cha : char *pass
2_pass=getpass("donner votre password");
mais en realité je voulais maquer la saisie par des etoiles car avec getpass c du vide
merci bcp Skyrunner meri +Emmanuel Delahaye
Pour mettre des étoiles, tu dois régler le terminal en mode caractère (par opposition au mode ligne). Bien évidemment, il n'existe aucune façon portable de le faire, ni à mon avis aucune façon garantie (il est possible que certains terminaux s'en moquent).
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
dsl Médinoc mais j'etilise le turbo c je suis sur bindows![]()
Dans ce cas, si getch() marche, tu peuxx utiliser getch()...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Avec getch(), et putch() de CONIO, tu peux faire une fonction de saisie qui masque avec des '*'. C'est scolaire ou industriel ?Envoyé par khedji
En tout cas, c'est assez intéressant. Il faut tout gérer, y compris la correction avec la touche BackSpace qui envoie 8 (BS). et la touche de fin de saisie qui envoit 13 (CR).
Fait de ton mieux et poste ton code si il ne fonctionne pas.
getch() !!! j'ai pas compris ce que tu veux dire
je veux remplacer le caractere taper par le user en etoile![]()
like this :
PASSWORD:******
j'ai utlisé getpass propsé par Emmanuel mais c'est comme si tu veux t'identifier en root ya rien qui s'affiche en tapant les caracteres du PW ..merci
Ah, ça rappelle des souvenirs...
J'avais ceci sous mon vieux QuickC...
Je ne me souvenais plus que c'était aussi peu commenté, par contre...
J'utilisais les fonctions de graph.h pour gérer aussi la couleurs...
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 #include <stdio.h> #include <conio.h> #include <graph.h> #include "typedef.h" #include "bool.h" /* FONCTION DE SAISIE D'UNE CHAINE ------------------------------- */ void inputstr(char *chaine,size_t taille,BOOL pwd) { size_t i=0; int carac; COORDXY ISposx,ISposy; struct rccoord postexte; char caracchaine[2]; caracchaine[1]=0; postexte=_gettextposition(); ISposx=(COORDXY)postexte.col; ISposy=(COORDXY)postexte.row; do { carac=getch(); if(i==taille-1 && carac!=13 && carac!=8) continue; if(carac>31) { caracchaine[0]=(pwd ? (char)'*' : (char)carac); _settextposition(ISposy,ISposx); _outtext(caracchaine); ISposx++; chaine[i]=(char)(carac); i++; } if(carac==8 && i!=0) { chaine[i]=0; i--; ISposx--; _settextposition(ISposy,ISposx); _outtext(" "); _settextposition(ISposy,ISposx); } } while(carac!=13); chaine[i]=0; }
Mais ça doit être facile à traduire. Si khedji est fainéant, je posterai la version épurée qui utilise juste getch(), putch() et printf()...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
je pense que vous devez me la poster
![]()
et merciiiiiiiiiiiiiiii bcp
Je crois que je vais au moins attendre demain, histoire de ne pas poster la solution trop vite.![]()
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
beh comme vous voudrez Médinocpour le moment le getpass de Emmanuel Delahaye fait affaire et sincerement je vous remerci bcp
![]()
Voilà...
Je le rappelle, ça utilise getch(), donc ça n'est pas vraiment portable.
Même si on trouve des bibliothèques pour ça sur pas mal de plate-formes, ça ne marchera pas sans lesdites bibliothèques...
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 /* FONCTION D'ENTREE DE CHAINE --------------------------- */ void inputstr(char *chaine,int taille,BOOL bPwd) { int i=0,carac; do { carac=getch(); if(i==taille-1 && carac!=13 && carac!=8) continue; if(carac>31) { putch(bPwd ? '*' : carac); chaine[i]=(char)(carac); i++; } if(carac==8 && i!=0) { chaine[i]=0; i--; printf("\b \b"); } } while(carac!=13); chaine[i]=0; }
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Yo !Envoyé par Médinoc
MingW avec CONIO :
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 #include <conio2.h> #include <stddef.h> /* FONCTION D'ENTREE DE CHAINE --------------------------- */ void inputstr (char *const chaine, size_t const taille, int const bPwd) { size_t i = 0; int carac; do { carac = getch (); if (i == taille - 1 && carac != 13 && carac != 8) continue; if (carac > 31) { putch (bPwd ? '*' : carac); chaine[i] = (char) (carac); i++; } if (carac == 8 && i != 0) { chaine[i] = 0; i--; cprintf ("\b \b"); } } while (carac != 13); chaine[i] = 0; } #ifdef TEST #include <string.h> #define EOL "\n\r" int main (void) { char login[32 + 1]; char password[8 + 1]; cprintf ("Login: "); inputstr (login, sizeof login, 0); cprintf (EOL "Password: "); inputstr (password, sizeof password, 1); cprintf (EOL); if (strcmp (login, "aladin") == 0) { if (strcmp (password, "sesame") == 0) { cprintf ("Welcome to the treasure cave" EOL); } else { cprintf ("Go to hell!" EOL); } } else { cprintf ("unknown user" EOL); } return 0; } #endif
le getch il marche trooo bien voila mon code final :
gotoxy(33,10);textcolor(12);cprintf("PASSWORD : ");
i=0;
while((pass[i]=getch())!=13)
{
putchar('*');
i++;
}
pass[i]='\0';
Belle passoire... Je vais passer un mot de passe de 250 caractères, pour voir...Envoyé par khedji
On t'avait pourtant passé du code sécurisé...
euuh !!Emmanuel bien sur j'ai utiliser le code final que vous avez posté :d
Partager