Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP mot mystère. Modification de valeur

Pourquoi la variable motMystere n'est pas modifiée.

Sujet résolu
    23 novembre 2023 à 16:07:36

    Bonjour

    J'ai du mal à comprendre ce code

    //
    //  main.cpp
    //  Priority
    //
    //  Created by Ranga Gonnage on 15/12/2021.
    //
    
    #include <iostream>
    #include <string>
    #include <ctime>
    #include <cstdlib>
    
    #include "main.hpp"
    
    using namespace std;
    
    void melangerLettres(string *mot)
    {
        string melange;
        int position(0);
        std::cout << *mot << endl;
    
       //Tant qu'on n'a pas extrait toutes les lettres du mot
        while (mot->size() != 0)
        {
            //On choisit un numéro de lettre au hasard dans le mot
            position = rand() % mot->size();
            //On ajoute la lettre dans le mot mélangé
            melange += mot->at(position);
            //On retire cette lettre du mot mystère
            //Pour ne pas la prendre une deuxième fois
            mot->erase(position, 1);
        }
        //On assigne le mot mélangé au pointeur
        *mot = melange;
    }
    
    int main()
    {
        string motMystere, motUtilisateur, *motMelange(nullptr);
        
    
        //Initialisation des nombres aléatoires
        srand(time(0));
    
        //1 : On demande de saisir un mot
        cout << "Saisissez un mot à l’abri des regards : ";
        cin >> motMystere;
        
        motMelange = new string(motMystere);
    
        //2 : On récupère le mot avec les lettres mélangées dans motMelange
        melangerLettres(motMelange);
    
        //3 : On demande à l'utilisateur quel est le mot mystère
        while (motUtilisateur != motMystere)
        {
            cout << endl << "Quel est ce mot ? " << *motMelange << endl;
            cin >> motUtilisateur;
    
            if (motUtilisateur == motMystere)
            {
                cout << "Bravo !" << endl;
            }
            else
            {
                cout << "Ce n'est pas le mot !" << endl;
            }
        }
        //On recommence tant qu'il n'a pas trouvé
        
        delete motMelange;
    
        return 0;
    }

    D'après  ce que j'ai lu dans les cours sur les pointeurs. Un pointeur est une variable qui contient l'adresse d'une autre variable.

    Ligne 40 : donc la variable motMelange est initialisé au début à 0

    Ligne 50: on l'initialise avec l'adresse de  motMystere

    Donc si je voulais modifier la valeur de motMystere , je devrais écrire *motMelange = " ". (C'est ce que j'ai compris).

    Ensuite on récupère le mot mystère dans melangerLettres qui prend en paramètre, la valeur contenu dans l'adresse sur lequel pointe motMelange.

    Donc si je demande la valeur contenu dans *mot, je devrais obtenir la valeur contenu dans motMystere.

    Ensuite à la fin du code, on modifie la valeur contenu dans l'adresse vers lequel pointe *mot. Donc en théorie, on modifie la valeur contenu dans motMystere. Mais pourtant ce n'est pas le cas.

    Est-ce quelq'un peut m'expliquer? Merci d'avance. Désolé si j'ai raté un épisode.

    -
    Edité par ZakMus 23 novembre 2023 à 16:12:21

    • Partager sur Facebook
    • Partager sur Twitter
      23 novembre 2023 à 16:38:39

      ZakMus a écrit:

      Ligne 50: on l'initialise avec l'adresse de  motMystere

      Non, tu lui affectes l'adresse d'un bloc mémoire (std::string) alloué sur le tas avec new (initialisé avec le contenu de motMystere).

      PS : A savoir que l'on utilise très rarement les pointeur en C++.

      -
      Edité par rouIoude 23 novembre 2023 à 17:38:30

      • Partager sur Facebook
      • Partager sur Twitter
      ...

      TP mot mystère. Modification de valeur

      × 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