Programme a cessé de fonctionner?

Signaler
-
 BIOoOAG123 -
Bonjour, à tous, je suis face à un petit problème,
Tout est dans le titre! :) Mon programme m'ouvre la fenêtre et cesse de fonctionner. Comment gérer ce type d'erreurs en C++? Et comment trouver la source de l'erreur et de ce fait la corriger?

#include 
#include <string>
#include <ctime>
#include <cstdlib>
#include <vector>

using namespace std;

int main()
{
    srand(time(0));

    //1 : On demande de saisir un mot
    vector<string> tableauMot(2, "rien");


    tableauMot[0] = "LOL";
    tableauMot[1] = "TEST";
    tableauMot[2] = "Hahaha";


    string mystere = tableauMot[2];
    cout << mystere;

    //2 : On mélange les lettres du mot


    string motMelange = mystere;
    string mot("");

    int position;
    while (position != 0)
    {
        position = rand() % motMelange.size();
        motMelange[position];
        mot += motMelange[position];
        motMelange.erase(position, 1);
    }


    cout << mot << endl;




    //3 : On demande à l'utilisateur quel est le mot mystère
    cout << "Quel est le mot mystere?" << endl;
    string reponse;
    cin >> reponse;

    while (reponse != mystere)
    {
        cout << "Ce n'est pas le bon mot, essayes encore!";
        cout << "Quel est le mot mystere?" << endl;
        cin >> reponse;
    }



   return 0;
}


Je me demandais aussi, n'y a t'il pas un mode pas à pas pour exécuter le code pour voir un ça peut bugger? (Je suis sous code block)

Merci d'avance.

2 réponses

Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
Bonjour.

Ce genre d'erreur ne s'attrape pas par du code, mais se corrige :p
Tu peux utiliser "gdb" qui te permet de faire du pas à pas. Je ne connais pas Code::Block, mais il me semble que gdb est intégré dedans (voir la documentation de ton IDE).

Ton souci est que tu manipules un vecteur de taille 2 mais que tu y mets 3 éléments...

Plutôt que de choisir la taille en avance, et te tromper après, met simplement les éléments à la suite via "push_back" qui redimensionne automatiquement.

  std::vector<std::string> tableauMot;
  tableauMot.push_back("LOL");
  tableauMot.push_back("TEST");
  tableauMot.push_back("Hahaha");


Si tu as le droit de l'utiliser, esssaie "random_shuffle" pour mélanger tes lettres:
  #include  // Ajouter ceci

  std::random_shuffle(tableauMot.begin(), tableauMot.end());


Enfin, dernier petit conseil: Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Merci beaucoup de ta réponse. je vais corriger ça et me faire une petite note. Comme je pensais qu'il partait à 0, en mettant tableauMot[2]; je pensais également qu'il comprenait 3 valeurs 0, 1 t 2. Je ne me ferai plus avoir!

On m'a déjà fais remarquer l'utilisation des using namespace, mais même en le lisant je n'ai pas bien saisi à quoi cela servait et son utilisation?