IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Masque de saisie


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut Masque de saisie
    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

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par khedji
    bonjour a tous je veux bien savoir comment masquer la saisie d'une zone texte du genre :

    [codeprintf("LOGIN : ");gets(login);
    printf("PASSWORD : ");gets(pass);[/code]

    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.

  3. #3
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    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 */

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    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

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    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.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    dsl Médinoc mais j'etilise le turbo c je suis sur bindows

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    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.

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par khedji
    dsl Médinoc mais j'etilise le turbo c je suis sur bindows
    Avec getch(), et putch() de CONIO, tu peux faire une fonction de saisie qui masque avec des '*'. C'est scolaire ou industriel ?

    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.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    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

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    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...
    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;
    }
    J'utilisais les fonctions de graph.h pour gérer aussi la couleurs...

    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.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    je pense que vous devez me la poster
    et merciiiiiiiiiiiiiiii bcp

  12. #12
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par khedji
    je pense que vous devez me la poster
    et merciiiiiiiiiiiiiiii bcp
    T'as raison...


  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    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.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    beh comme vous voudrez Médinoc pour le moment le getpass de Emmanuel Delahaye fait affaire et sincerement je vous remerci bcp

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    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.

  16. #16
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Médinoc
    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...
    Yo !

    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

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    il y'a rien a dire sauf un grand MERCI pour vous

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    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';

  19. #19
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par khedji
    le getch il marche trooo bien voila mon code final :
    Belle passoire... Je vais passer un mot de passe de 250 caractères, pour voir...

    On t'avait pourtant passé du code sécurisé...

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    euuh !!Emmanuel bien sur j'ai utiliser le code final que vous avez posté :d

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/09/2005, 17h18
  2. Définir propriété masque de saisie en VBA
    Par spidev dans le forum Access
    Réponses: 4
    Dernier message: 21/06/2005, 14h10
  3. Masque de saisie
    Par moicalex dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/03/2005, 19h05
  4. Réponses: 2
    Dernier message: 17/02/2005, 00h00
  5. problème avec masque de saisie dans table
    Par porki dans le forum Access
    Réponses: 6
    Dernier message: 13/10/2004, 08h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo