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 :

code de saisie de mot de passe -> mauvaise conversion


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut code de saisie de mot de passe -> mauvaise conversion
    Bonjour,

    En ayant fait un code de saisie de mot de passe lequel permet d'une part de masquer les caractères saisies et deplus avertit si le nombre de caractères à saisir est dépassé. Le programme compile très bien sous DevC++

    Ma première question est-ce que le code n'est pas trop lourd aurais je pu faire ça en une ou deux fonctions simples?

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    #include <conio.h>
    #include <string.h>
    #include <stdio.h>
     
    #define BEL 7
    #define BS 8
     
     
    unsigned int typeutil; 
     
    int verifie_passe(char tentative[])
    {
       char passe[] = "sesame";
       int pos_caractere = 0;
       do
       {
          if (passe[pos_caractere] != tentative[pos_caractere])
             return 0;
          pos_caractere++;
       } while (passe[pos_caractere] != '\0');
       return 1;
    }
     
    char *lire_mp (void)
    {
       static char tampon[8];
       size_t i = 0;
       char lettre;
     
       while ((lettre = getch ()) != '\r')
       {
          if (lettre == BS)
          {
             if (i > 0)
             {
                putch (lettre);
                putch (' ');
                putch (lettre);
                i--;
             }
             else
             {
                putchar (BEL);
             }
          }
          else
          {
             if (i < sizeof tampon - 1)
             {
                tampon[i] = lettre;
                i++;
                putch ('*');
             }
             else
             {
                putchar (BEL);
             }
          }
       }
     
       tampon[i] = 0;
       return tampon;
    }
     
    void Users_mode()
    {
    unsigned char choiceuser; 
    unsigned char pass[5]; 
    int num_tries =0;  
    typeutil=0;   
    printf("Would you like to enter in administrator mode (Y/N) ?\n\n");   
     
      choiceuser=getchar();  
       if((choiceuser=='Y')||(choiceuser=='y'))     
       {  
       char tentative[81];
       char *pwd;
       do
       {
     
          printf("\nEntrez le mot de passe :\n");
          pwd = lire_mp ();
       } while (verifie_passe(pwd) == 0);
       printf("\nbienvenue\n");
     
                typeutil = 1;
                printf("You are in administrator mode \n"); 
     
       }
     
       if((choiceuser=='N')||(choiceuser=='n'))
       {
    	typeutil = 0;
        //printf("You aren't in administrator mode \n"); 
       }
    }
     
    int main()
     
    {
        //unsigned int typeutil; 
        Users_mode(); 
        getchar();
        getchar();
        return 0;
     
    }
    Et ma seconde question c'est que travaillant dans un système embarqué à base de microcontrolleur j'ai un compilateur specifique, mon compilateur est Keil C51 µVisoin2 quand je compile ce code j'ai un warning :

    *** WARNING C318 IN LINE 25 OF ADC.c: can't open file 'conio.h'

    Et puis j'ai un problème d' error :

    error C267: 'putch': requires ANSI-style prototype

    à ce niveau de mon code :

    putch (lettre);



    en utilisant ceci: puts (lettre);

    alors j'ai ce problème :

    ADC.C(1147): error C214: illegal pointer conversion


    Je ne sais pas comment integrer ce code ?


    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    putchar(), fputc()...
    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.

  3. #3
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Oui avec putchar(), ça compile bien par contre j'ai un autre soucis cette fois
    mon programme reboot lorsque je veux entrer en mode administrateur, c'est à dire lorsque je tape 'y' ou 'Y' ça bug quelque part mais je sais pas pourquoi ?

    Si je tape 'n' ou 'N' le programme tourne bien.

    Merci

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Aliveli
    En ayant fait un code de saisie de mot de passe lequel permet d'une part de masquer les caractères saisies et deplus avertit si le nombre de caractères à saisir est dépassé. Le programme compile très bien sous DevC++

    Ma première question est-ce que le code n'est pas trop lourd aurais je pu faire ça en une ou deux fonctions simples?
    Simplification :
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    #include <conio.h>
    #include <string.h>
    #include <stdio.h>
     
    #define BEL 7
    #define BS 8
     
    int verifie_passe (char const tentative[])
    {
       char const passe[] = "sesame";
       return strcmp (tentative, passe) == 0;
    }
     
    void lire_mp (char *tampon, size_t size)
    {
       size_t i = 0;
       char lettre;
     
       while ((lettre = getch ()) != '\r')
       {
          if (lettre == BS)
          {
             if (i > 0)
             {
                putch (lettre);
                putch (' ');
                putch (lettre);
                i--;
             }
             else
             {
                putchar (BEL);
             }
          }
          else
          {
             if (i < size - 1)
             {
                tampon[i] = lettre;
                i++;
                putch ('*');
             }
             else
             {
                putchar (BEL);
             }
          }
       }
     
       tampon[i] = 0;
    }
     
    void Users_mode (void)
    {
       unsigned char choiceuser;
       int typeutil = 0;
       printf ("Would you like to enter in administrator mode (Y/N) ?\n\n");
     
       choiceuser = getchar ();
       if ((choiceuser == 'Y') || (choiceuser == 'y'))
       {
          char pwd[8];
          do
          {
             printf ("\nEntrez le mot de passe :\n");
             lire_mp (pwd, sizeof pwd);
          }
          while (verifie_passe (pwd) == 0);
          printf ("\nbienvenue\n");
     
          typeutil = 1;
          printf ("You are in administrator mode \n");
     
       }
     
       if ((choiceuser == 'N') || (choiceuser == 'n'))
       {
          typeutil = 0;
          //printf("You aren't in administrator mode \n");
       }
    }
     
    int main (void)
    {
       Users_mode ();
       return 0;
    }
    Et ma seconde question c'est que travaillant dans un système embarqué à base de microcontrolleur j'ai un compilateur specifique, mon compilateur est Keil C51 µVisoin2 quand je compile ce code j'ai un warning :

    *** WARNING C318 IN LINE 25 OF ADC.c: can't open file 'conio.h'

    Et puis j'ai un problème d' error :

    error C267: 'putch': requires ANSI-style prototype
    C'est clair que putch() et getch() sont des fonctions non portables (tout comme conio.h>)

    Il faut donc, soit trouver un équivalent sur ton compilateur (c'est probable), soit les coder soi même. Tu communiques par le port série ?
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Merci Emmanuel,

    Je vais tester le code simplifié sinon je lirais
    la doc du compilateur.

    Merci

  6. #6
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Après avoir tester le nouveau code le programme redemarre pas mais il y a un autre petit soucis toujours malheureusement.

    Ca bug se fait à l'appel au niveau de la fonction users_mode():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
             lire_mp (pwd, sizeof pwd);
          }
          while (verifie_passe (pwd) == 0);
    lorsque la fonction lire_mp() est appelée ( je l'ai verifié avec debug )

    C'est un problème de code dans le getch du while de la fonction lire_mp():


    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
       while ((lettre = getchar ()) != '\r')
       {
          if (lettre == BS)
          {
    
             if (i > 0)
             {
                putchar (lettre);
                putchar (' ');
                putchar (lettre);
                i--;
             }
             else
             {
                putchar (BEL);
             }
          }
          else
          { 
    
             if (i < size - 1)
             {
                tampon[i] = lettre;
                i++;
                putchar ('*');
             }
             else
             {
                putchar (BEL);
             }
          }
    
       }
    en effet en ayant mis getchar à la place de getch, ça va deja mieux car le programme ne redemarre pas mais le resultat est bizarre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Would you like to enter in administrator mode (Y/N) ?
     
    y
    Entrez le mot de passe :
    se*s*a*s*m*e*s*s
    sesmed
     
    seememds
    s
    sme
    e
    e
    On ne sort plus de la saise et après le 7 ème étoile on entend le beep à chaque saisie sur le clavier indefiniment je ne voit pas comment faire ?


    Merci

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Aliveli
    C'est un problème de code dans le getch du while de la fonction lire_mp():
    Pourquoi as-tu remplacé getch() par getchar() ? Ces fonctions n'ont absolument pas le même comportement et ne sont absolument pas interchangeables.
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    J'ai simplement changer getch() par getchar() pour essayer de trouver une solution pour que le programme ne redemarre plus .

    Mais apparement c'est pas une bonne solution ?
    Là je sais pas pour quelles rqisons ça redemarre?


    Merci

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Aliveli
    J'ai simplement changer getch() par getchar() pour essayer de trouver une solution pour que le programme ne redemarre plus .

    Mais apparement c'est pas une bonne solution ?
    Là je sais pas pour quelles rqisons ça redemarre?
    Je ne comprend pas ton problème avec 'le programme ne redemarre plus', 'ça redemarre'. Tu parles de quoi ?

    Quel est le code qui pose problème ?
    Quel est ce problème exactement ?

    N'oublie pas qu'on est ni dans ta tête ni devant ta manip.
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    concretement ; mon programme redemarre quand il me demande à l'écran :
    "Would you like to enter in administrator mode (Y/N) ?"

    Et si répond "y" alors je vois apparaitre "Entrez le mot de passe :" et directement le programme redemarre (comme si je fesait un reset géneral), il reprnde du début avec les initialisations, etc... et donc de nouveau quand à l'écran apparaît : "Would you like to enter in administrator mode (Y/N) ?" et si je tape encore "y" il redemarre ainsi de suite..
    Par contre le programme ne redemarre pas si je tape "n".


    Techniquement parlant; quand je dis que le programme redemarre c'est lorsque ( et ça j'ai pu le constater avec des traces dans mon debug) j'arrive dans le getch() du while de la fonction lire_mp().
    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
     
     while ((lettre = getch ()) != '\r')
       {
          if (lettre == BS)
          {
     
             if (i > 0)
             {
                putchar (lettre);
                putchar (' ');
                putchar (lettre);
                i--;
             }
             else
             {
                putchar (BEL);
             }
          }
          else
          { 
     
             if (i < size - 1)
             {
                tampon[i] = lettre;
                i++;
                putchar ('*');
             }
             else
             {
                putchar (BEL);
             }
          }
     
       }
    Mais par contre avec ce même code dans DevC++ ça marche bien ?

    Et mon programme ne redemarre pas si je remplace getch() par getchar() MAIS alors il fait des choses bizarres comme dans la capture que j'ai envoyée. Mais ça j'ai tester aussi avec DevC++ et effectivement ça fait des choses bizarres aussi donc je conclu que je dois laisser le getch() mais alors je sais pas quoi changer dans ton code de simplification que tu m'as envoyé afin que mon programme marche normalement ç'est à dire sans redemarrer et fonctionnant correctement?

    Merci

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    en passant comme ça pourquoi tester '\r' et pas '\n' ????
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par souviron34
    en passant comme ça pourquoi tester '\r' et pas '\n' ????
    Avec le getch() de conio, c'est logique.
    Pas de Wi-Fi à la maison : CPL

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Aliveli
    concretement ; mon programme redemarre quand il me demande à l'écran :
    "Would you like to enter in administrator mode (Y/N) ?"

    Et si répond "y" alors je vois apparaitre "Entrez le mot de passe :" et directement le programme redemarre (comme si je fesait un reset géneral), il reprnde du début avec les initialisations, etc... et donc de nouveau quand à l'écran apparaît : "Would you like to enter in administrator mode (Y/N) ?" et si je tape encore "y" il redemarre ainsi de suite..
    Par contre le programme ne redemarre pas si je tape "n".
    <...>
    Je ne vois pas ce que tu veux faire. Je te conseille de l'expliquer avec des mots simples et clairs, et ensuite d'écrire l'algorithme qui effectue le traitement attendu. On verra alors comment coder tout ça dans le détail.
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    J'ai remplacer cette ligne :

    while ((lettre = getch ()) != '\r')

    par celle-ci :

    while ((lettre = getch ()) != '\n')

    mais mon prgramme reboot toujours??


    En fait ce que je veux c'est :

    1)
    d'abord lancer la fonction Users_mode au lancement du programme afin de demander si on veut entrer en mode administrateur. si on repond yes on doit rentrer un mot de passe sinon on sort et on continu normalement dans le reste du programme.

    2)
    donc si on repond yes j'appelle une autre fonction (lire_mp()) qui elle permet de masquer le caractère saisie par des "*" et deplus permet de beeper si il y a plus de 8 caractères saisies.

    Et ce 2 eme paragraphe avec la fonction lire_mp() se repetera tant que
    ce qu'on aura tapé au clavier ne correspond pas au mot de passe valide et ce via un while qui appelle la fonction verifie_passe().

    voila plus concretement.

    Merci

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Aliveli
    En fait ce que je veux c'est :
    <...>
    OK. Il ne te reste plus qu'à écrire un algorithme qui se comporte de la manière décrite. C'est là que ça devient intéressant.
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Salut,

    Peut-être que "getch()" de conio.h fait appel à une interruption non compatible dans ce mode avec le système d'exploitation ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par dj.motte
    Peut-être que "getch()" de conio.h fait appel à une interruption non compatible dans ce mode avec le système d'exploitation ?
    Mais non...
    Pas de Wi-Fi à la maison : CPL

  18. #18
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Mais en fait le conio.h n'est pas reconnu dans mon compilateur.

    serait vous m'aider dans l'algorithme, je l'ai deja fait mais que dois je faire pour avoir un programme qui fonctionne bien, pouvez vous m'aider ?

    Merci

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Aliveli
    Mais en fait le conio.h n'est pas reconnu dans mon compilateur.

    serait vous m'aider dans l'algorithme, je l'ai deja fait mais que dois je faire pour avoir un programme qui fonctionne bien, pouvez vous m'aider ?
    Comme je te l'avais fait remarquer au début de cette discussion, <conio.h> n'est pas standard. Il faut donc trouver un équivalent sur ta plateforme.
    • Quelle machine ? µC 8051
    • Quel compilateur ? Keil C51 µVision2.

    Déjà, il serait bon d'étudier ceci :

    http://www.keil.com/support/man/docs...51_library.htm

    et là, on tombe sur

    http://www.keil.com/support/man/docs...51__getkey.htm

    Qui est la fonction de bas niveau qui permet de lire un caractère sur le port série.

    Il suffit donc de définir
    #define getch() _getkey()
    Le prototype est :
    Je recommande donc ceci :
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    #ifdef __C51__
    #include "conio51.h"
    #else
    #include <conio.h>
    #endif
    #include <string.h>
    #include <stdio.h>
     
    #define BEL 7
    #define BS 8
     
    int verifie_passe (char const tentative[])
    {
       char const passe[] = "sesame";
       return strcmp (tentative, passe) == 0;
    }
     
    void lire_mp (char *tampon, size_t size)
    {
       size_t i = 0;
       char lettre;
     
       while ((lettre = getch ()) != '\r')
       {
          if (lettre == BS)
          {
             if (i > 0)
             {
                putch (lettre);
                putch (' ');
                putch (lettre);
                i--;
             }
             else
             {
                putchar (BEL);
             }
          }
          else
          {
             if (i < size - 1)
             {
                tampon[i] = lettre;
                i++;
                putch ('*');
             }
             else
             {
                putchar (BEL);
             }
          }
       }
     
       tampon[i] = 0;
    }
     
    void Users_mode (void)
    {
       unsigned char choiceuser;
       int typeutil = 0;
       printf ("Would you like to enter in administrator mode (Y/N) ?\n\n");
     
       choiceuser = getchar ();
       if ((choiceuser == 'Y') || (choiceuser == 'y'))
       {
          char pwd[8];
          do
          {
             printf ("\nEntrez le mot de passe :\n");
             lire_mp (pwd, sizeof pwd);
          }
          while (verifie_passe (pwd) == 0);
          printf ("\nbienvenue\n");
     
          typeutil = 1;
          printf ("You are in administrator mode \n");
     
       }
     
       if ((choiceuser == 'N') || (choiceuser == 'n'))
       {
          typeutil = 0;
          //printf("You aren't in administrator mode \n");
       }
    }
     
    int main (void)
    {
       Users_mode ();
       return 0;
    }
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #ifndef H_CONIO51
    #define H_CONIO51
    /* conio51.h */
    #include <stdio.h>
     
    #define getch() _getkey()
    #define putch(c) putchar(c)
     
    char _getkey (void);
     
    #endif /* guard */
    Pas de Wi-Fi à la maison : CPL

  20. #20
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Merci Emmanuel,

    Ca marche nickel !!

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA]Comment, dans le code VBA, hasher un mot de passe ?
    Par lord abortion dans le forum VBA Access
    Réponses: 6
    Dernier message: 18/04/2007, 16h41
  2. Saisie de mot de passe
    Par jonny_the_dog dans le forum C++
    Réponses: 1
    Dernier message: 12/01/2007, 00h27
  3. Pb de sécurité, de saisie de mot de passe
    Par gui38 dans le forum Sécurité
    Réponses: 4
    Dernier message: 06/06/2006, 10h45
  4. [Forum] Saisie de mot de passe pour login
    Par Alexlesilex dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 24/04/2006, 16h39
  5. cacher la saisie du mot de passe
    Par Antoine_1977 dans le forum Modules
    Réponses: 5
    Dernier message: 23/09/2005, 18h13

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