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
:)
Version imprimable
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
:)
:tagcode:Citation:
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:
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).
dsl Médinoc mais j'etilise le turbo c je suis sur bindows :oops:
Dans ce cas, si getch() marche, tu peuxx utiliser getch()...
Avec getch(), et putch() de CONIO, tu peux faire une fonction de saisie qui masque avec des '*'. C'est scolaire ou industriel ?Citation:
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 :D
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:
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()...
:oops: je pense que vous devez me la poster :oops:
et merciiiiiiiiiiiiiiii bcp
T'as raison...Citation:
Envoyé par khedji
http://www.bonjourdefrance.com/n5/images/main.gif
Je crois que je vais au moins attendre demain, histoire de ne pas poster la solution trop vite. :)
beh comme vous voudrez Médinoc :D pour le moment le getpass de Emmanuel Delahaye fait affaire et sincerement je vous remerci bcp :roll:
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:
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; }
Yo !Citation:
Envoyé par Médinoc
MingW avec CONIO :
Code:
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
il y'a rien a dire sauf un grand MERCI pour vous :D
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...Citation:
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