saisie de chaine au clavier sans affichage de celle ci??

saisie de chaine au clavier sans affichage de celle ci?? - C - Programmation

Marsh Posté le 10-06-2005 à 15:07:56    

salut.
voila j'ai fait une petite appli sous linux avec une saisi de mot de passe , mais j'aimerai ke celui ne s'afiche pas quand je le tape?
si vous avez des idée??
merci


---------------
si un jour on te reproche que ton travail n'est pas celui d'un professionel . dit toi bien que se sont des professionels qui on construit le titanic et des amateurs l'arche de noë...
Reply

Marsh Posté le 10-06-2005 à 15:07:56   

Reply

Marsh Posté le 10-06-2005 à 15:10:06    

en mode console ?

Reply

Marsh Posté le 10-06-2005 à 15:11:18    

oui


---------------
si un jour on te reproche que ton travail n'est pas celui d'un professionel . dit toi bien que se sont des professionels qui on construit le titanic et des amateurs l'arche de noë...
Reply

Marsh Posté le 10-06-2005 à 15:12:42    

tu utilises quoi comme fonction pour lire le clavier ?

Reply

Marsh Posté le 10-06-2005 à 15:13:51    

j'ai essayé de trouvé une méthode de cin ki le faisait mais apparement yen a pas , scanf pareil , read , getchar, bref un peut tout , mais té propostions sont les bienvenues!!


---------------
si un jour on te reproche que ton travail n'est pas celui d'un professionel . dit toi bien que se sont des professionels qui on construit le titanic et des amateurs l'arche de noë...
Reply

Marsh Posté le 10-06-2005 à 15:15:08    

réponds à ma question

Reply

Marsh Posté le 10-06-2005 à 15:16:40    

et en plus tu postes à la fois dans C et dans C++...

Reply

Marsh Posté le 10-06-2005 à 15:19:29    

oui j'ai vu je sui désolé.
Ben je men fou de la méthode pour lire le clavier ,  c'est le résultat final qui m'importe


---------------
si un jour on te reproche que ton travail n'est pas celui d'un professionel . dit toi bien que se sont des professionels qui on construit le titanic et des amateurs l'arche de noë...
Reply

Marsh Posté le 10-06-2005 à 15:24:39    

avec cin c sur que sa serait mieux


---------------
si un jour on te reproche que ton travail n'est pas celui d'un professionel . dit toi bien que se sont des professionels qui on construit le titanic et des amateurs l'arche de noë...
Reply

Marsh Posté le 10-06-2005 à 15:34:25    

Pour faire ce genre de chose sous unixoïdes, j'avais utilisé tcsetattr() et tcgetattr(), dans termios.h
 
Je ne sais pas si c'est le plus simple (et c'est certainement pas portable), mais c'est radical. Mais vu qu'il s'agit ici d'une saisie de mot de passe...
 
EDIT : je crois qu'il faut aussi intercepter les signaux pour rétablir la configuration du terminal à la fin du programme en cas de sigint ou sigkill ou quoi que ce soit d'autre (ça remonte à loin pour moi donc faudrait confirmer).


Message édité par Elmoricq le 10-06-2005 à 15:39:36
Reply

Marsh Posté le 10-06-2005 à 15:34:25   

Reply

Marsh Posté le 10-06-2005 à 15:37:56    

on m'en a parler de supprimer l'echo de la console!?


---------------
si un jour on te reproche que ton travail n'est pas celui d'un professionel . dit toi bien que se sont des professionels qui on construit le titanic et des amateurs l'arche de noë...
Reply

Marsh Posté le 10-06-2005 à 15:39:46    

drazor a écrit :

on m'en a parler de supprimer l'echo de la console!?


 
Exactement.

Reply

Marsh Posté le 10-06-2005 à 15:41:15    

ouerfff c un truc de malade mais je vais regarder mon prof va faire un edrole degueule quand il va voir sa?!


---------------
si un jour on te reproche que ton travail n'est pas celui d'un professionel . dit toi bien que se sont des professionels qui on construit le titanic et des amateurs l'arche de noë...
Reply

Marsh Posté le 10-06-2005 à 15:48:04    

tu récupères caractère par caractère.

Reply

Marsh Posté le 10-06-2005 à 15:51:58    

j'avai pensé a sa , dès qu'un caratere est saisi jenvoi le caratere de retour chariot a l'écran!
mais la fonction getchar il faut confirmer par entreé c pas térible??!!


---------------
si un jour on te reproche que ton travail n'est pas celui d'un professionel . dit toi bien que se sont des professionels qui on construit le titanic et des amateurs l'arche de noë...
Reply

Marsh Posté le 10-06-2005 à 15:54:57    

Ca dépend dans le cadre de quel cours c'est.
Si tu sais ce que tu fais et que tu sais expliquer comment ça fonctionne, et pourquoi tu as fait ce choix, y a pas de raison qu'il n'apprécie pas. ;)
 
Maintenant, je ne savais pas que c'était pour un cours, c'est peut-être de l'overkill la configuration du terminal.
Le mieux serait de lui demander ce qu'il en pense.
 
 
Autrement ce n'est pas si difficile, c'est le principe des flags.
Tu récupères la configuration courante de ton terminal avec tcgetattr(). Tu en sauves une copie pour rétablir la configuration à la fin du programme.
Puis, tu modifies cette structure pour enlever le flag "ECHO" (avec un & logique sur ~ECHO (non bit à bit de ECHO)).
 
Exemple (à vérifier, j'écris ça à la main levée après un repas arrosé :P) :

Code :
  1. #include <stdio.h>
  2. #include <termios.h>
  3. #include <unistd.h>
  4. int main(void)
  5. {
  6.    struct termios config, sauvegarde;
  7.    int code_retour;
  8.    code_retour = tcgetattr(STDIN_FILENO, &config);
  9.    if ( code_retour == -1 )
  10.    {
  11.       /* gerer l'erreur de tcgetattr */
  12.    }
  13.    /* sauvegarde */
  14.    sauvegarde = config;
  15.  
  16.    /* on enleve l'echo */
  17.    config.c_lflag &= ~ECHO;
  18.    code_retour = tcsetattr(STDIN_FILENO, TCSANOW, &config);
  19.    if ( code_retour == -1 )
  20.    {
  21.       /* gerer l'erreur de tcsetattr */
  22.    }
  23.    /* on releve le mot de passe */
  24.    /* et maintenant on retablit la configuration initiale */
  25.    code_retour = tcsetattr(STDIN_FILENO, TCSANOW, &sauvegarde);
  26.    if ( code_retour == -1 )
  27.    {
  28.       /* erreur machin tout ca */
  29.    }
  30.    return 0;
  31. }


 
EDIT : testé et ça fonctionne. Aussi, j'ai corrigé les occurences de stdin (qui est un FILE*) par "0", qui est le descripteur d'entrée par défaut. Doit y avoir une constante pour ça, me souvient pas de laquelle c'est.
 
EDIT 2 : pfiou, temps que je parte en week-end. Le descripteur d'entrée par défaut c'est STDIN_FILENO, défini dans unistd.h


Message édité par Elmoricq le 10-06-2005 à 16:59:10
Reply

Marsh Posté le 10-06-2005 à 16:55:07    

Non , c pour mon projet de bts (bts IRIS).
Du moment que sa marche il s'en tape le prof
 
Et merci pour tout c tré simpa
 


---------------
si un jour on te reproche que ton travail n'est pas celui d'un professionel . dit toi bien que se sont des professionels qui on construit le titanic et des amateurs l'arche de noë...
Reply

Marsh Posté le 10-06-2005 à 18:54:07    

drazor a écrit :

voila j'ai fait une petite appli sous linux avec une saisi de mot de passe , mais j'aimerai ke celui ne s'afiche pas quand je le tape?


Rien de portable.
getpass()
[n]curses...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

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