je débute en C++. je viens de terminer le TP du mot mystère. Très bien ça marchait tant que tout était dans le 'main.cpp'.
Voulant me familiariser avec les fonctions, j'en ai créée une avec qui mélange les lettre du mot mystère.
Cependant, lorsque je compile, j'ai une erreur qui me prend singulièrement bien la tête. J'ai beau éplucher les forums, je n'arrive pas à prendre le dessus.
Je code avec l'IDE Code Blocks.
Voici le main.cpp
#include <iostream>
#include <string> // Permet de créer des chaînes de caractères.
#include <fstream> // Permet d'ouvrir et de lire un fichier
#include <ctime> // Permet de construire le mot aléatoire
#include <cstdlib> // Permet de construire le mot aléatoire
#include "melangeur2Mot.h" // appelle le fichier à en-tête pour appeler la fonction "melangeur2Mot"
using namespace std;
// On définit le chemin ou se trouve le fichier texte!
string path("D:/data_mat/Documents/Documents/Travail/PostDoc/Programmation/cours_Cpp/mot_mystere/");
string const pathFileMystere(path+="mystere.txt");
int main()
{
/*
- motMystere: mot à trouver
-motMelange: mot mystère aléatoirment mélangé
- motTest: réponse entrée par l'utilisateur du programme
*/
string motMystere,motMelange,motTest; // définition des varaiables à utiliser.
// srand(time(0));
ifstream fichier(pathFileMystere); // On ouvre et lit le fichier contenant le mot mystère
if(fichier) // Condition permettant de savoir si le fichier est ouvert et lu correctement.
{
while(getline(fichier, motMystere)) //Tant qu'on n'est pas à la fin, on lit
motMelange=melangeur2Mot(motMystere); // fonction mélangeant le mot mystère
cout << "Trouve le mot mystere mecreant, ou EM viendra te lacrymogeniser: "<<endl;
cout << motMelange << endl; // le mot mystère est mélangé
}
else
{
cout<< "ERREUR: Impossible d'ouvrir le fichier en lecture." <<endl;
// Le message d'erreur apparait si le fichier n'a pu être lu.
}
do // On demande à l'utilisateur de trouver le mot mystère
// L'opération est effectuée jusqu'à ce que le mot soit trouvé.
{
cin >> motTest;
int tailleMotTest(motTest.size()), tailleMotMystere(motMystere.size());
if (motTest == motMystere)
{
cout << "Bravo! Tu as déjà pensé au doctorat mention ''des chiffres et des lettres''?" << endl;
}
else if (tailleMotTest!=tailleMotMystere)
{
cout << "Après à compter! Le mot mystere contient: " << tailleMotMystere << " lettres" << endl;
}
else
{
cout << "Ce n'est pas le mot !" << endl;
}
}while (motTest != motMystere); // On continue jusqu'à ce que les mots correspondent.
//On recommence tant qu'il n'a pas trouvé
return 0;
}
Le fichier à en-tête:
#ifndef MELANGEUR2MOT_H_INCLUDED
#define MELANGEUR2MOT_H_INCLUDED
#include<string>
#include <ctime>
#include <cstdlib>
std::string melangeur2Mot(std::string const& mot);
/*
J'ai mis un passage par référence constante, pour éviter que le mot mystère ne soit modifié
pendant l'opération de mélange des lettrtes
*/
#endif // MELANGEUR2MOT_H_INCLUDED
et enfin la fonction: melangeur2Mot.cpp
#include "melangeur2Mot.h"
/*
Le "mélangeur de mot" est un programme qui mélange aléatoirement
les lettres du mot.
*/
string melangeur2Mot(string const& mot)
{
int const tailleMot(mot.size());
int position;
string motMelange;
srand(time(0));
for(int i(0);i<tailleMot; i++)
{
position = rand() % mot.size(); // On détermine aléatoirement la position d'une lettre
motMelange[i]=mot[position]; // On affecte la letttre tirée au sort de la nouvelle chaine de caracère "motMelange".
mot.erase(position, 1); // Pour ne pas piocher plusieurs fois la même lettre, on retire la lettre tirée au sort.
}
return motMelange;
}
Si jamais l'un ou l'une d'entre vous arrive à arrêter d'aller pleurer dans un coin de ma chambre, je vous en serait reconnaissant.
A tutti!
- Edité par MathiasRojo 17 octobre 2019 à 14:36:06
Changes de cours. Il apprend un sacré paquet d'âneries à ne pas faire, en plus de montrer des exemples de code buggés et d'être obsolète (quelques recherches sur le forum t'en diront plus). Prends plutôt le tutoriel disponible sur Zeste de Savoir. Si tu préfères un cours déjà complet, tourne toi vers le C++ Primer de Lippman dans sa dernière édition (en anglais), il sera un poil moins à jour mais c'est un bon cours.
srand/rand sont des fonctionnalités dépréciées du langage C, pour l'aléatoire en C++, voir le header <random>
MathiasRojo a écrit:
J'ai mis un passage par référence constante, pour éviter que le mot mystère ne soit modifié pendant l'opération de mélange des lettrtes
Tu pourrais aussi simplement recevoir une copie de la chaîne, ce serait même plus simple. Et pour le mélange en C++, tu peux utiliser std::shuffle.
Concernant ton problème c'est assez commun avec l'IDE Code::Blocks, qui est un choix douteux d'IDE, tu as ajouter le fichier dans les dossiers du projet mais tu ne l'as pas ajouté comme cible de compilation. Clique doit sur le fichier CPP, propriétés, build et vérifier qu'il est coché comme cible de compilation.
Très bien ça marchait tant que tout était dans le 'main.cpp'.
Là ça ne fonctionnera plus, concernant ta fonction melangeur2Mot(), tu passes ta chaine de caractères en référence const mais tu essaies de la modifier avec la fonction membre erase().
Mais de tout façon Ksass`Peuk t'a donné tous les liens nécessaires.
Undefined reference to "function"
× 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.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C