Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur mot de passe C++

    27 mars 2020 à 16:51:42

    Bonjour à tous.

    Je débute dans le C++, et j'essaye de faire un système ou deux utilisateurs s'affrontent pour deviner un mot de passe. Je vous met le code ci joint... :

    #include <iostream>
    #include <string>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
    	 char t;
            do /*Début du deuxième jeu, sans mélangeur.*/
            {
                cin.ignore();
                string mdp, mdpd;
    
                cout << "Tres bien, tu as gagne ce jeu ! Maintenant, on va faire plus complique ! J2, tu vas entrer un Mot de Passe, et J1 va devoir entierement le deviner ! J2, entre un mot de passe." << endl;
                getline(cin, mdp);
                system("cls");
                
                cout << "A ton tour, J1 ! Et pas d'aide, cette fois-ci...\n";
                cin.ignore();
                do
                {
                    
                    getline(cin, mdpd);       
    
                    if (mdpd == mdp)
                    {
                        cout << "Tu as devine le mot de passe !" << endl;
                    }
                    else
                    {
                        cout << "Ready player one..." << endl;
                    }
                } while (mdpd != mdp);
    
                cin.ignore();
                
                cout << "Wanna play again ? O/N" << endl;
                cin >> t;
            } while (t == 'o' || t == 'O');
    
    }

    Mon problème est le suivant :

    Lorsque je rentre une première fois le mot de passe, il l'enregistre bien.

    Supposons que J1 a beaucoup de chances et devine du premier coup le mot de passe. Voici ce que j'obtiens !

    La condition n'est pas remplie...

    Pourtant, la même orthographe est utilisée...

    Je soupçonne la fonction getline d'entrer en jeu, mais...J'ai des doutes. Quelqu'un à une solution ?

    En vous remerciant, par avance,

    -
    Edité par NaerandirTirisstaurë 27 mars 2020 à 16:54:45

    • Partager sur Facebook
    • Partager sur Twitter
      28 mars 2020 à 8:36:27

      Bonjour, mets un point d’arrêt en ligne 7 et regardes le contenu de tes variables, ça peut aider.
      • Partager sur Facebook
      • Partager sur Twitter
        30 mars 2020 à 16:54:55

        Bonjour,

        Qu'est-ce qu'un point d'arrêt ? Que suis-je censé observer ?

        • Partager sur Facebook
        • Partager sur Twitter
          30 mars 2020 à 17:14:05

          Salut !

          Pour comparer deux std::string, il faut utiliser std::string::compare().

          if (mdpf.compare(mdp) == 0) {
              cout << "Tu as devine le mot de passe !" << endl;
          }

           Quand tu compares deux std::string à ta façon, tu compares les adresses mémoires (me semble t'il !)

          Teste le code ci-dessous pour t'en rendre compte :)

          std::string s1 = "test";
          
          // s2 pointe sur l'adresse de s1
          std::string *s2 = &s1;
          
          if (s1 == *s2) {
             std::cout << "same adress" << std::endl;
          }




          • Partager sur Facebook
          • Partager sur Twitter
            30 mars 2020 à 17:33:19

            > Quand tu compares deux std::string à ta façon, tu compares les adresses mémoires (me semble t'il !)

            Non, on compare des adresses avec des pointeurs, pas avec des std::string. == fonctionne très bien.

            Il me semble y avoir beaucoup trop de std::cin.ignore()

            • Partager sur Facebook
            • Partager sur Twitter
              30 mars 2020 à 18:41:53

              Trop de cin.ignore() ? Mais, pourtant, j'en ai besoin, auquel cas les buffer ne seront pas vidé...Et le mot de passe donné ne correspondra jamais...

              Je connais le compare. Mais, j'aimerais pousser un peu plus loin que juste comparer. Je voudrais en fait, indiquer a l'utilisateur quand il se trompe, afin qu'il puisse corriger...
              Donc, je suis obligé de passer par une vieille boucle Do-While ^^

              • Partager sur Facebook
              • Partager sur Twitter
                30 mars 2020 à 20:52:56

                De quel buffer tu parles ? Comprends-tu vraiment ce que fait ignore() ?

                • Partager sur Facebook
                • Partager sur Twitter
                  31 mars 2020 à 14:53:21

                  Je pense que je viens de comprendre réellement ce qu'il fait...Je vais revoir bien en détail, car je pense avoir confondus deux fonctions...
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Erreur mot de passe C++

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown