Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme pour un pendu

    18 novembre 2021 à 18:48:58

    Bonjour,

    J'ai commencé a apprendre le c++(et la programation en general, parce que les cours de NSI au lycée...voila), ducoup apres avoir fait le premier chapitre de open classroom je me suis lancé des petits defi comme ca avec des jeux cconnu. Je code un pendu, je me debrouille pas trop mal mais voila, pas d'erreur le jeu se lance, mais ne fonctionne pas trop, rentrer une lettre marche 1 fois sur 2, et quand je fais deviner un mot parfois le jeu me dit que la lettre n'est pas dans le mot alors que si tres clairement 

    voila mon code

    #include<string>
    #include <iostream>
    #include <ctime>
    #include<cstdlib>
    
    using namespace std;
    
    void Clear()
    {
        cout << "\x1B[2J\x1B[H";
    }
    
    int main()
    {
        //ecran titre//
    
        cout << "__________________________________" << endl;
        cout << "                                  " << endl;
        cout << "| BIENVENUE DANS LE JEU DU PENDU |" << endl;
        cout << "__________________________________" << endl;
        string leMot("empty");
        cout << "\n\nVeuillez choisir le Mot que votre ami devra retrouvez: " << endl;
        cin >> leMot;
        Clear();
    
        //essai//
    
        cout << "__________________________________" << endl;
        cout << "                                  " << endl;
        cout << "| BIENVENUE DANS LE JEU DU PENDU |" << endl;
        cout << "__________________________________" << endl;
    
        int tailleMot(leMot.size());
        char  essaiGlobal[100];
        do {
            cout << essaiGlobal << endl;
            cout << "\n\nVoulez vous rentrez un mot ou une lettre?(L pour lettre, M pour mot): " << endl;
            string essaiMot;
            char essaiLettre;
            char choix('a');
            cin >> choix;
            int i(10);
            
    
            if (choix == 'L')
            { 
                cout << "\nProposez votre lettre :" << endl;
                cin >> essaiLettre;
    
                if (leMot.find(essaiLettre) == false)
                {
                    i = i - 1;
                    cout << "Et non " << essaiLettre << " n'est pas dans le mot" << endl;
    
                }
                if (leMot.find(essaiLettre) == true)
                {
                    int positionLettreEssai;//position de la,lettre dans l'essai
                    positionLettreEssai = leMot.length();
                    essaiGlobal[positionLettreEssai] = essaiLettre;
                    cout << " Et oui, bravo! " << essaiLettre << " est dans le mot." << endl;
                }
    
                //utilisez l'equivalent de len pour ajouter a un nouveau string la lettre
            }
    
            if (choix == 'M')
            {
                cout << "\nProposez votre Mot :" << endl;
                cin >> essaiMot;
                if (essaiMot == leMot)
                {
                    cout << "BRAVO! Le mot etait bien" << leMot << endl;
                    exit;
                }
    
                if (essaiMot != leMot)
                {
                    i = i - 1;
                    cout << "Et non c'est pas ca, attention il te reste que " << i<<" essais!" << endl;
    
                }
    
    
    
            }
    
        } while (essaiGlobal != leMot);
    
        return 0;
        }

    et voici ce qu'il me donne lorsque je met certaines lettre

    Veuillez choisir le Mot que votre ami devra retrouvez:

    banane

    Proposez votre lettre :

    n

    ╠╠╠╠╠╠a╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠♠

    merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      18 novembre 2021 à 19:33:07

      Hello,

      Puisque tu fais du C++, poste ton code dans ce forum-là, ici c'est le forum C. Je demande le déplacement.

      • Partager sur Facebook
      • Partager sur Twitter

      Il y a ceux qui font des sauvegardes, et ceux qui n'ont pas encore eu d'incident....

        18 novembre 2021 à 19:54:51

        ah je pensais qque c'etait le forum c++, merci👌 je vais le poster dans le c+++ tt de suite
        • Partager sur Facebook
        • Partager sur Twitter
          18 novembre 2021 à 20:08:49

          Bonjour,

          Tu as peut-être posé de manière prémonitoire la question sur forum C.
          Sur le forum C++, on te dira attention tu as écris du code C par moment. En particulier ligne 34, tu définis un tableau brut de char. Et en C comme en C++ tu obtiens une zone totalement aléatoire. Et ligne 36, tu veux l'afficher. Comme elle n'a pas le format attendu pour une chaîne de caractère du C, l'afficher va faire n'importe quoi!
          Pour plus d'info sur ce qu'est une chaine de caractère au sens du C, tu es au bon endroit!

          Pour une réponse C++. Les tableaux bruts du C sont à proscrire en C++, tu as le type std::string ou peut-être ici un std::vector<char> qui feront beaucoup mieux et plus simplement le boulot.
          Et pour continuer sur le C++, la fonction membre std::basic_string<CharT,Traits,Allocator>::find() ne retourne pas true ou false, elle retourne l'endroit où elle a trouvé le caractère que tu recherches ou sinon std::string::npos. Donc tes lignes 50 et 56 reviennent respectivement à tester si le caractère est en première puis seconde position dans ta chaîne.

          • Partager sur Facebook
          • Partager sur Twitter

          En recherche d'emploi.

            18 novembre 2021 à 20:39:24

            Merci beaucoup pour ta reponse 😊, tu m'aide beaucoup. mais du coup si find ne me donne pas si la lettre est dans le mot quelle fonction dois-je utiliser?
            • Partager sur Facebook
            • Partager sur Twitter
              18 novembre 2021 à 21:52:18

              Bonjour,

              Déplacement vers un forum plus approprié

              Le sujet est déplacé de la section Langage C vers la section Langage C++

              • Partager sur Facebook
              • Partager sur Twitter
                18 novembre 2021 à 23:26:59

                C'est bien la bonne fonction mais pas la bonne manière de s'en servir:

                std::string::size_type  la_pos = leMot.find( essaiLettre );
                if ( la_pos == std::string::npos ) { // si la lettre n'est pas dans le mot
                }
                else { // sinon la lettre est bien dans le mot en position la_pos
                }

                Note que si la lettre est dans le mot, elle peut y être plusieurs fois (la fonction te retourne où est la première). Il faut peut-être gérer cela, et la position retournée peut t'être utile. La fonction find() existe aussi avec 2 paramètres:

                la_pos = leMot.find( essaiLettre, la_pos+1 );  // recherche la position suivante
                • Partager sur Facebook
                • Partager sur Twitter

                En recherche d'emploi.

                Probleme pour un pendu

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                • Editeur
                • Markdown