en C .... masquer des caracteres?

en C .... masquer des caracteres? - C++ - Programmation

Marsh Posté le 15-04-2002 à 19:33:07    

comment faire pour masquer les caracteres que l'utilisateur rentre.
ex: il doit entre 2156 et a l'ecran pdt qu'il tape s'affiche ****


---------------
:sol:
Reply

Marsh Posté le 15-04-2002 à 19:33:07   

Reply

Marsh Posté le 15-04-2002 à 19:45:18    

J'ai un truc dégueulasse dans mes cartons, ah voilà :

Code :
  1. /* Une fonction à la con */
  2. static void prchar(char c)
  3. {
  4.   write(1,&c,1);
  5. }
  6. /**************** readpass ****************
  7. *                                        *
  8. * Demande un mot de passe, en affichant  *
  9. * prompt, et l'enregistre dans pass.     *
  10. *                                        *
  11. ******************************************/
  12. static void readpass(char *prompt,char *pass)
  13. {
  14.   struct termios ter,oter;
  15.   int c;
  16.   int ind=0;
  17.   tcgetattr(0,&ter);
  18.   oter=ter;
  19.   ter.c_lflag &= ~ECHO;
  20.   ter.c_lflag &= ~ICANON;
  21.   ter.c_oflag &= ~ONLCR;
  22.   ter.c_oflag &= ~OCRNL;
  23.   ter.c_oflag &= ~ONLRET;
  24.   ter.c_cc[VMIN]=1;
  25.   ter.c_cc[VTIME]=0;
  26.   tcsetattr(0,TCSANOW,&ter);
  27.   printf(prompt);
  28.  
  29.   while(1)
  30.     {
  31.       c=getchar();
  32.       if (c==EOF)
  33.         exit(-1);
  34.       if (c=='\n')
  35.         {
  36.           pass[ind]=0;
  37.           break;
  38.         }
  39.       if (ind && (c==oter.c_cc[VERASE] || c==8))
  40.         {
  41.           ind--;
  42.           if (oter.c_lflag & ECHOE)
  43.             {
  44.               write(1,"\b \b",3);
  45.             }
  46.           else
  47.             prchar('\b');
  48.         }
  49.       else if(ind<8 && c>=' ' && c!=oter.c_cc[VERASE])
  50.         {
  51.           pass[ind++]=c;
  52.           prchar('*');
  53.         }
  54.     }
  55.   write(1,"\n\r",2);
  56.   tcsetattr(0,TCSANOW,&oter);
  57. }


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 15-04-2002 à 20:12:18    

Jar Jar a écrit a écrit :

J'ai un truc dégueulasse dans mes cartons, ah voilà :

Code :
  1. /* Une fonction à la con */
  2. static void prchar(char c)
  3. {
  4.   write(1,&c,1);
  5. }
  6. /**************** readpass ****************
  7. *                                        *
  8. * Demande un mot de passe, en affichant  *
  9. * prompt, et l'enregistre dans pass.     *
  10. *                                        *
  11. ******************************************/
  12. static void readpass(char *prompt,char *pass)
  13. {
  14.   struct termios ter,oter;
  15.   int c;
  16.   int ind=0;
  17.   tcgetattr(0,&ter);
  18.   oter=ter;
  19.   ter.c_lflag &= ~ECHO;
  20.   ter.c_lflag &= ~ICANON;
  21.   ter.c_oflag &= ~ONLCR;
  22.   ter.c_oflag &= ~OCRNL;
  23.   ter.c_oflag &= ~ONLRET;
  24.   ter.c_cc[VMIN]=1;
  25.   ter.c_cc[VTIME]=0;
  26.   tcsetattr(0,TCSANOW,&ter);
  27.   printf(prompt);
  28.  
  29.   while(1)
  30.     {
  31.       c=getchar();
  32.       if (c==EOF)
  33.         exit(-1);
  34.       if (c=='\n')
  35.         {
  36.           pass[ind]=0;
  37.           break;
  38.         }
  39.       if (ind && (c==oter.c_cc[VERASE] || c==8))
  40.         {
  41.           ind--;
  42.           if (oter.c_lflag & ECHOE)
  43.             {
  44.               write(1,"\b \b",3);
  45.             }
  46.           else
  47.             prchar('\b');
  48.         }
  49.       else if(ind<8 && c>=' ' && c!=oter.c_cc[VERASE])
  50.         {
  51.           pass[ind++]=c;
  52.           prchar('*');
  53.         }
  54.     }
  55.   write(1,"\n\r",2);
  56.   tcsetattr(0,TCSANOW,&oter);
  57. }

 




 
chui qu'en premiere :/ et je comprends pas tres bien ça [#e21c00]

 

[jfdsdjhfuetppo]--Message édité par bistou--[/jfdsdjhfuetppo]


---------------
:sol:
Reply

Marsh Posté le 15-04-2002 à 20:21:42    

man termios si tu es sous linux :)
Sinon man google ;-)
 
tcgetattr(0,&ter) permet de recupere les parametre actuels de ton term.
 
ter.c_lflag &= ~ECHO <-- modifie les parametres
 
tcsetattr(0,TCSANOW,&ter) <-- enregistre les parametres ...
 
Voila  ;)


---------------
"La mort, c'est comme la vie. Sauf que t'es mort."
Reply

Marsh Posté le 15-04-2002 à 20:48:14    

bistou a écrit a écrit :

chui qu'en premiere :/ et je comprends pas tres bien ça [#e21c00]


Bah moi non plus je ne comprends pas tout, j'ai repompé ça dans un autre programme.
Je pense que man tcgetattr contient les informations nécessaires.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 15-04-2002 à 21:56:31    

ca concenre le "term" de unix :d  
tu peux changer la config de ton term ( config = mode canonique pa ex,echo, et puis d autre truc....)
 
 
struct termios ter,oter; // << structre de la config du term
 
 tcgetattr(0,&ter);         // initialise pour avoir la config d orine du term
 oter=ter;                 // tu la sauvegarde pour la remettre a la fin quand t aurais fin plein de connerie :))
 ter.c_lflag &= ~ECHO;             //
 ter.c_lflag &= ~ICANON;           // des modif sur avec des FLAG
 ter.c_oflag &= ~ONLCR;            //
 ter.c_oflag &= ~OCRNL;  
 ter.c_oflag &= ~ONLRET;  
 ter.c_cc[VMIN]=1;  
 ter.c_cc[VTIME]=0;  
 tcsetattr(0,TCSANOW,&ter);          // tu change la config du term avec les nouvelles modifs
 ......
....tu fias des test d ecriture etc.....
.......
 tcsetattr(0,TCSANOW,&oter);    // tu remets le term comme au debut :d

Reply

Marsh Posté le 15-04-2002 à 23:44:59    

merci a tous


---------------
:sol:
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed