Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [Risolto]Nascondere input da tastiera (console) con degli asterischi
Forum - C/C++ - [Risolto]Nascondere input da tastiera (console) con degli asterischi

Avatar
Michael.Kiske (Normal User)
Newbie


Messaggi: 8
Iscritto: 17/04/2013

Segnala al moderatore
Postato alle 17:44
Martedì, 23/04/2013
Salve a tutti, ultimamente mi sono posto un problema sciocco riguardante l' input con la funzione "cin", E' possibile visualizzare asterischi invece delle lettere premute. Mi è venuto in mente :idea: il metodo che forse la funzione cin adotta: ogni carattere che si preme lo inserisce in un buffer (o per meglio dire una variabile) e fa istantaneamente l' echo di windows del carattere. A me servirebbe una funzione che non fa vedere i caratteri che si premono ma qualcosa a piacere (In questo mio caso *), è possibile questo  :-?. In ogni caso; grazie in anticipo :).


Edit, Ho trovato il codice su questo sito http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=10 ...:

Per chi volesse il codice eccolo qui:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <ctype.h>
  4.  
  5. int main()
  6. {
  7.   int ch;
  8.   char pword[BUFSIZ];
  9.   int i = 0;
  10.  
  11.   puts ("Enter your password");
  12.   fflush(stdout);
  13.  
  14.   while ((ch = getch()) != EOF
  15.           && ch != '\n'
  16.           && ch != '\r'
  17.           && i < sizeof(pword) - 1)
  18.   {
  19.     if (ch == '\b' && i > 0)
  20.     {
  21.       printf("\b \b");
  22.       fflush(stdout);
  23.       i--;
  24.       pword[i] = '\0';
  25.     }
  26.     else if (isalnum(ch))
  27.     {
  28.       putchar('*');
  29.       pword[i++] = (char)ch;
  30.     }
  31.   }
  32.  
  33.   pword[i] = '\0';
  34.  
  35.   printf ("\nYou entered >%s<", pword);
  36.  
  37.   return 0;
  38. }
  39.  
  40. /*
  41.  * Program output
  42.  Enter your password
  43.  ********
  44.  You entered >security<
  45.  
  46.  *
  47.  */


Ultima modifica effettuata da Michael.Kiske il 24/04/2013 alle 8:41


Abortion, when it is needed
Execution, for those who deserve it
Controlling our existence with every life we take
Look into the future to prepare us for our fate
The giving and taking of life will always be
Altering the future
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 17:56
Martedì, 23/04/2013
Ciao !

Con il c, è possibile tale effetto combinando le funzioni kbhit()  - http://www.programmingsimplified.com/c/conio.h/kbhit - e getchar().


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
Michael.Kiske (Normal User)
Newbie


Messaggi: 8
Iscritto: 17/04/2013

Segnala al moderatore
Postato alle 18:04
Martedì, 23/04/2013
Testo quotato

Postato originariamente da Poggi Marco:

Ciao !

Con il c, è possibile tale effetto combinando le funzioni kbhit()  - http://www.programmingsimplified.com/c/conio.h/kbhit - e getchar().



Grazie :k:, non sapevo dell' esistenza di questa funzione kbhit(). getchar la conosco e la uso invece di system("pause")...ma ha un problema nell' input, per inserire dentro una variabile string dovrei convertire ogni volta il corrispondente ascii di ogni tasto, o sbaglio?. Potrei usare qualche altra funzione che non fa l' echo :-?

Ultima modifica effettuata da Michael.Kiske il 23/04/2013 alle 18:04


Abortion, when it is needed
Execution, for those who deserve it
Controlling our existence with every life we take
Look into the future to prepare us for our fate
The giving and taking of life will always be
Altering the future
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:12
Martedì, 23/04/2013
Le soluzioni sono molte, ad esempio puoi utilizzare l' operatore +  (http://www.cplusplus.com/reference/string/string/operator+/ ) per aggiungere il garattere restituito dalla getchar() . Oppure salvare il carattere premuto su una variabile char,  fare gli opportuni controlli, ed eventualmente aggiungerla alla stringa.

Ultima modifica effettuata da Poggi Marco il 23/04/2013 alle 18:13


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
Michael.Kiske (Normal User)
Newbie


Messaggi: 8
Iscritto: 17/04/2013

Segnala al moderatore
Postato alle 18:16
Martedì, 23/04/2013
Testo quotato

Postato originariamente da Poggi Marco:

Le soluzioni sono molte, ad esempio puoi utilizzare l' operatore +  (http://www.cplusplus.com/reference/string/string/operator+/ ) per aggiungere il garattere restituito dalla getchar() . Oppure salvare il carattere premuto su una variabile char,  fare gli opportuni controlli, ed eventualmente aggiungerla alla stringa.



Che dire, grazie mille :k:.


Abortion, when it is needed
Execution, for those who deserve it
Controlling our existence with every life we take
Look into the future to prepare us for our fate
The giving and taking of life will always be
Altering the future
PM Quote