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 :

Gestion de mot de passe


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Mai 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Mai 2021
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Gestion de mot de passe
    Bonjour, j'ai fait beaucoup d’essais avant d'arriver jusqu'ici et maintenant j'en suis bloqué.
    J'ai commencé il y a peu à me renseigner sur le fonctions et à leurs utilités (jusqu'à présent je restais dans la fonction main).
    Donc voyez vous j'essaie un exercice où il faut : Créer un mot de passe personnel lors de la première connexion, vérifier celui-ci et le redemander pour les prochaines fois par la suite je le fais moi même sans soucis.
    Donc j'ai fait pour la plus part le travail mais étant donné que je souhaite les développer dans différentes fonctions à présent je n'y arrive pas, pourriez vous m’aider, merci d'avance !

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
     
    int MDP(int *Nmdp){
        int Smdp;
        do{
        printf("Entrez votre mot de passe personnel a 4 chiffre:");
        scanf("%d",&Nmdp);
        char sure[4];
        char YES[4];
            YES[0]='O';
            YES[1]='U';
            YES[2]='I';
        char NO[4];
            NO[0]='N';
            NO[1]='O';
            NO[2]='N';
        int verif;
        if(Nmdp>0||Nmdp<9999){
            printf("Etes-vous sure de votre mot de passe : %d",Nmdp);
            do{
            printf("\nOUI/NON : ");
            scanf("%3s",&sure);
            int boucle;
            for(boucle=0;boucle=2;boucle++){
            if(sure[boucle]==YES[boucle]){
                printf("\nMot de passe enregistre");
                verif=1;
                Smdp=1;
                }else if(sure[boucle]==NO[boucle]){
                    printf("\nVeuillez renoter votre mot de passe : ");
                    verif=1;
                }else{
                printf("Veuillez choisir OUI/NON : ");
                }
                }
            }while(verif!=1);
        }
        }while(Smdp!=1);
        return Nmdp;
    }
    void start(){
        int enter;
        int lecode;
        if(enter==0){
            enter++;
            MDP(Nmdp);
            lecode=MDP;
        }else if(enter!=0){
        printf("\nVeuillez entrer votre mot de passe :");
        scanf("%d",&lecode);
        }
        if(lecode!=MDP){
            printf("\nVous n'etes pas l'utilisateur du AirLiberty");
            return 0;
        }else if(lecode==MDP){
            printf("\nBonjour, initialisation de votre AirLiberty, veuillez patienter...\n");
        }
    }
    void position(int positionO){
        int n;
            n = rand() % 1000 + 1;
            printf("%d\n", n);
            if(n>500){
                printf("\nVous vous trouvez dans une zone ou le masque est obligatoire, veuillez le mettre");
            }else{
                printf("\nLe masque n'est pas obligatoire ici !");
            }
    }
    int main(){
        start();
        position;
        return 0;
    }

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Déjà il est d'usage de poster le code source dans le forum plutôt que demander aux bénévoles venus t'aider d'aller d'abord le télécharger pour pouvoir le lire. Et généralement on préfère un code qui compile, preuve que le PO a ouvert au-moins une fois dans sa vie un livre de C. Car quand je te vois écrire for(boucle=0;boucle=2;boucle++) je me dis que tu ne les as pas souvent ouverts ces livres !!!

    Or dans les livres il y a les explications sur la syntaxe des fonctions et de leurs appels, y compris quand il y a des paramètres à leur passer. Et enfin de faire preuve d'un certain "bon sens" et de logique. Si tu appelles la fonction "start" de cette façon start() (donc avec des parenthèses), pourquoi tu appelles "position" ainsi position sans parenthèses ??????????? Surtout que tu sais appeler une fonction avec paramètre puisque tu appelles MDP(Nmdp) (sauf que comme tu ne récupères pas ce qu'elle retourne, son appel est perdu).

    Mis à part ce détail, les défauts généraux (en vrac)
    • la fonction MDP() est prévue pour recevoir une adresse en paramètre. A quoi sert cette adresse???
    • tu testes des valeurs de variables sans les initialiser auparavant (ex variable "enter")
    • tu compares un int (lecode) avec une fonction (MDP) sans appeler la fonction donc tu compares en fait cet int avec l'adresse de la fonction
    • tu fais un test sur enter==0 sinon tu testes enter != 0. Penses-tu vraiment qu'il peut y avoir un 3° cas style enter qui serait un nombre mais ni égal ni différent de 0...


    Plus ta boucle pour vérifier YES/NO lettre par lettre (il existe strcmp() qui permet de comparer des chaines) mais à chaque lettre correcte tu fais le traitement (normalement on vérifie d'abord tout le mot avant de décider si le mot convient/ne convient pas pour faire/ne pas faire le traitement et non pas à chaque lettre). Bon j'arrête là, ce code est irrécupérable. Commence par apprendre le minimum du minimum avant de te lancer.

    Et pour les fonctions, une fonction est une espèce d'usine qui reçoit des éléments, fait un travail et ressort un résultat. Un peu à l'image des fonctions mathématiques f(x)=.... A toi de définir le travail que tu veux faire. Il faut pour ça pouvoir découper son problème en étapes permettant d'atteindre la solution puis tu programmes chaque étape. Et plus une fonction est simple, mieux on peut la réutiliser dans différents contextes.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Le fameux test pour exclure les nombres <=0 et >= 9999.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Mai 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Mai 2021
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Merci !
    Désolé, merci j'ai oublié de dire que je n'avais pas du tout finit le programme et même il est encore en cours ce n'est qu'une version brouillon et une vue d'ensemble mais voilà maintenant grâce tout de même à votre aide pour certaines choses j'ai pu comprendre commet utiliser une fonction, j'espère que je le fais bien, voici mon programme, on va dire V0.2 :
    PS : Par contre je sais vraiment pas si le message est bien mis avec le texte, si vous pourriez me dire, merci !

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
     
     
    int MDP(int Nmdp)
    {
        int Smdp;
        char sure[4];
        char YES[]="OUI";
        char NO[]="NON";
        int verif;
        do{
        printf("Entrez votre mot de passe personnel a 4 chiffres : ");
        scanf("%d",&Nmdp);
        if(Nmdp>=0&&Nmdp<=9999){
            printf("\nEtes-vous sure de votre mot de passe : %d\n",Nmdp);
            do{
            verif=0;
            Smdp=0;
            printf("OUI/NON : ");
            scanf("%3s",&sure);
            if(strcmp(sure,YES)==0){
                printf("\nMot de passe enregistre\n");
                verif=1;
                Smdp=2;
                }else if(strcmp(sure,NO)==0){
                    verif=1;
                }else{
                printf("Veuillez choisir ");
                }
            }while(verif!=1);
        }
        }while(Smdp!=2);
        return Nmdp;
    }
     
    int start(stay)
    {
        int lecode=0;
        int CodeS=0;
        CodeS=MDP(0);
        printf("\nVeuillez entrer votre mot de passe :");
        scanf("%d",&lecode);
        if(lecode!=CodeS){
            printf("\nVous n'etes pas l'utilisateur du AirLiberty !\n");
            stay++;
            return stay;
        }else{
            printf("\nBonjour, initialisation de votre AirLiberty, veuillez patienter...\n");
        }
    }
     
    int position(int positionO)
    {
        int mar=0;
        int n;
            n = rand() % 1000 + 1;
            if(n>500){
                printf("\nVous vous trouvez dans une zone ou le masque est obligatoire, veuillez le mettre");
            }else{
                printf("\nLe masque n'est pas obligatoire ici !");
                mar=1;
            }
            return mar;
    }
    int main()
    {
        int faux=0;
        faux=start(0);
        if(faux!=0){
            return 0;
        }
        position(0);
     
        return 0;
    }

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Mai 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Mai 2021
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    V0.3 on va dire :
    Toujours un problème avec les VALVEs, elles montre un FERMETOUVERT pour la 2 je ne sias pas pk, Ah et pour ceux qui veulent savoir c'est un projet scolaire du coup normal que je ne sois pas un pro
    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
     
     
    int MDP(int Nmdp)
    {
        int Smdp;
        char sure[4];
        char YES[]="OUI";
        char NO[]="NON";
        int verif;
        do{
        printf("Entrez votre mot de passe personnel a 4 chiffres : ");
        scanf("%d",&Nmdp);
        if(Nmdp>=0&&Nmdp<=9999){
            printf("\nEtes-vous sure de votre mot de passe : %d\n",Nmdp);
            do{
            verif=0;
            Smdp=0;
            printf("OUI/NON : ");
            scanf("%3s",&sure);
            if(strcmp(sure,YES)==0){
                printf("\nMot de passe enregistre\n");
                verif=1;
                Smdp=2;
                }else if(strcmp(sure,NO)==0){
                    verif=1;
                }else{
                printf("Veuillez choisir ");
                }
            }while(verif!=1);
        }
        }while(Smdp!=2);
        return Nmdp;
    }
     
    int start(int stay)
    {
        int lecode=0;
        int CodeS=0;
        CodeS=MDP(0);
        printf("\nVeuillez entrer votre mot de passe : ");
        scanf("%d",&lecode);
        if(lecode!=CodeS){
            printf("\nVous n'etes pas l'utilisateur du AirLiberty !\n");
            stay++;
            return stay;
        }else{
            printf("\nBonjour, initialisation de votre AirLiberty, veuillez patienter");
            sleep(1);
            printf(".");
            sleep(1);
            printf(".");
            sleep(1);
            printf(".\n");
        }
        return stay;
    }
    int choix(int produit)
    {
        int alea;
        const int MIN = 1, MAX = 3;
       srand(time(NULL));
            alea = (rand() % (MAX + 1 - MIN)) + MIN;
        switch(alea)//Simulation de nombre de respiration possible (normalement nous serions dans les 3880 respiration pour vider une double bouteille).
        {
        case 1 : produit=15;
            break;
        case 2 : produit=8;
            break;
        case 3 : produit=5;
            break;
        }
        return produit;
    }
     
    int position(int ouv)
    {
        srand(time(NULL));
        int n;
            n = rand() % (10000 + 1);
            if(n>5000){
                printf("\nVous vous trouvez dans une zone ou le masque est obligatoire, veuillez le mettre !\nIl y a %d vivant dans les environs !\n",n);
     
            }else{
                printf("\nLe masque n'est pas obligatoire ici !\nIl n'y a que %d personnes vivant dans les environs !\n",n);
                ouv++;
            }
     
            return ouv;
    }
     
    void valve()
    {
        int setup=position(0);
        if(setup!=1){
        int capa=choix(0);
        int a=0, b=0,c=0,i,boucle;
        char V1[6],V2[6];
        for(boucle=0;boucle<=capa;boucle++){
        if(boucle==0){
            printf("Demarrage du AirLiberty");
            sleep(2);
            printf(".");
            sleep(1);
            printf(".");
            sleep(1);
            printf(".\n");
            a++;
        }
        if(boucle%2==0){
            a=1;
            b=0;
        }else{
            a=0;
            b=1;
        }
        switch(a)
        {
            case 1:V1[0]='O';V1[1]='U';V1[2]='V';V1[3]='E';V1[4]='R';V1[5]='T';
            break;
            case 0:V1[0]='F';V1[1]='E';V1[2]='R';V1[3]='M';V1[4]='E';
            break;
        }
        switch(b)
        {
            case 1:V2[0]='O';V2[1]='U';V2[2]='V';V2[3]='E';V2[4]='R';V2[5]='T';
            break;
            case 0:V2[0]='F';V2[1]='E';V2[2]='R';V2[3]='M';V2[4]='E';
            break;
        }
        printf("Valve 1 : %s, Valve 2 : %s \n",V1,V2);
        sleep(1);
        }
        printf("La bouteille est a cours, veuillez a la remplacer !\n");
        }
    }
     
    int main()
    {
        int faux=0;
        faux=start(0);
        if(faux!=0){
            return 0;
        }
        choix(0);
        position(0);
        valve(0);
        return 0;
    }

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Le fameux test pour exclure les nombres <=0 et >= 9999.
    Ah ces fameuses lois de "De Morgan" si utiles et pourtant si souvent négligées. Dommage j'ai raté ce passage C'est bien vu

    Citation Envoyé par Bousk Voir le message
    je n'avais pas du tout finit le programme et même il est encore en cours ce n'est qu'une version brouillon et une vue d'ensemble
    Oui mais bon, là la vue d'ensemble était tellement "d'ensemble" qu'on ne voyait plus rien du tout...

    Citation Envoyé par Watsuki01 Voir le message
    V0.3 on va dire
    Ok, ça va beaucoup mieux. Là on a une vue un peu moins "d'ensemble" mais un peu plus précise sur un code pas forcément fameux mais au-moins qui est compréhensible et qui compile

    Citation Envoyé par Watsuki01 Voir le message
    Toujours un problème avec les VALVEs, elles montre un FERMETOUVERT
    Toujours ton problème de lire une variable non initialisée => tu lis n'importe quoi.
    Une chaine en C est un tableau de caractères contenant impérativement une valeur '\0'. C'est cette valeur qui sert de repère. Toute fonction de traitement de chaine cherche ce '\0' pour s'arrêter. Or dans V1 tu positionnes le 'F', le 'E', le 'R', le 'M' et le 'E' mais pas le '\0' (si tu tiens absolument à le faire lettre par lettre il faut écrire explicitement V1[5]='\0'). Donc quand tu affiches "V1", la fonction printf() part du début 'F' et affiche tout ce qui suit jusqu'à trouver un '\0' qu'elle trouve par chance quelques cases plus loin (sinon tu récupérais carrément toute ta RAM à l'écran (*)). Sauf cas particuliers très clairement identifiés, une variable n'a jamais de valeur par défaut (et perso je néglige les cas spécifiques et considère qu'elle n'en a jamais jamais).
    Accessoirement tu as remplacé tes tests de départ par strcmp() (peut-être suite à ma première remarque) et c'est bien mais tu aurais un peu creusé la question de toi-même, tu aurais trouvé aussi strcpy() qui se charge de remplir une chaine et d'y mettre le '\0' nécessaire...

    (*) en fait comme tu lis plus loin que la plage allouée à V1, tu tombes dans ce qu'on appelle un UB (Undefined Behavior = Comportement Indéterminé). C'est la pire des situations en C car comme pour être le plus rapide possible le C ne vérifie rien (philosophie du C: le programmeur sait ce qu'il fait), toute action même illégale sera exécutée et tant pis pour ce qui arrive alors, ça peut être littéralement n'importe quoi y compris éteindre ton PC ou reformater ton disque dur (enfin bon plus maintenant suite à la protection de l'OS mais c'était vrai à une époque et ça illustre bien le UB).

    Sinon quelques soucis résduels
    • pas besoin se stocker "OUI" et "NON" dans des tableaux, tu as parfaitement le droit de passer une chaine littérale à strcmp() => if (strcmp(sure, "OUI") == 0)
    • ta fonction MDP() reçoit en paramètre une valeur qu'elle n'utilise pas => autant ne pas lui passer de paramètre. Pareil pour la fonction choix()
    • srand() sert à initialiser le moteur aléatoire de ton ordi => elle ne doit être appelée qu'une fois (généralement dans le main()) et non pas à chaque fois que tu as besoin d'un nombre aléatoire. Son rôle est double: d'une part elle permet d'avoir un générateur différent à chaque lancement mais aussi permet d'avoir le même générateur dans le cas de tests spécifiques (si on veut par exemple tester plusieurs fois la même suite on appelle srand() avec la même valeur on aura la même suite de nombre aléatoires)
    • dans la fonction valve(), tes variables a et b ne servent à rien, tu peux remplir directement V1 et V2 dans le if/else


    Citation Envoyé par Watsuki01 Voir le message
    Ah et pour ceux qui veulent savoir c'est un projet scolaire du coup normal que je ne sois pas un pro
    On ne te demande pas d'être un pro (surtout dans la section "débuter") mais d'avoir le minimum des bases pour présenter un code qui compile et qui ait un "semblant" de logique, ce qui n'était pas le cas de ton premier post. Par exemple même dans la plus petite des sections d'une école de ski, on demande aux enfants de savoir au-moins tenir sur leurs jambes...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. [VBA-E]Gestion de mot de passe
    Par Yolak dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 18/04/2007, 13h23
  2. Gestion de mot de passe
    Par cyril.ppn dans le forum C++Builder
    Réponses: 7
    Dernier message: 14/02/2007, 12h06
  3. gestion des mot de passe avec Access
    Par cyberbiker dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 07/09/2006, 15h42
  4. [LG] Gestion de mot de passe
    Par kakaroto dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2005, 09h13
  5. Génération aléatoire et gestion de mots de passe
    Par thomine dans le forum Sécurité
    Réponses: 5
    Dernier message: 23/03/2005, 16h58

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