/*Bonjour a tous, je viens d'arriver sur ce site, je suis étudiant en première année d'informatique et j'ai un problème a un tp que même la prof n'est pas parvenu a m'expliquer merci de me donner un petit coup de pouce =).
Voici le code lorsque j'affiche les mots du dictionnaire il affiche x fois (dépend du nombre de mots sélectionnés par l'utilisateur) le dernier mot qui a été entré dans la fonction remplir dictionnaire (1) et plus précisément je pense que le problème et que je manipule des pointeur sur objet avec maladresse mais je ne sais pas que faire pour que chaque pointeur pointe bien sur le mot que je désir.
PS : en commentaire les problème au ligne correspondante
*/
#include <iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
struct mot
{
char*tab;
int nb_synonymes;
int nb_max_synonymes;
char**synonymes;
char*definition;
};
struct dico {
mot **tab;
int taille_max;
int nb_mots;
};
char* saisir_chaine()
{
char*s , buffer[1024];
int x;
cin.getline(buffer,1024);
x=strlen(buffer)+1;
s=new char[x];
strcpy(s,buffer);
return s;
}
void afficher_mot(mot *m)
{
cout<<"Mot : "<<m->tab<<endl<<endl;
cout<<"Définition : "<<endl<<m->definition<<endl<<endl;
cout<<"Synonymes : "<<endl<<m->synonymes[0];
for(int i=1;i<m->nb_synonymes;i++)
cout<<", "<<m->synonymes[i];
cout<<"."<<endl<<endl;
}
mot* saisir_mot()
{
mot *m;
cout<<"Veuillez donner votre mot :";
m->tab=saisir_chaine();
cout<<"Donnez votre definition :";
m->definition=saisir_chaine();
do
{
cout<<"Donner le nombre de synonymes"<<endl;
cin>>m->nb_synonymes;
cout<<"Donnez le nombre max de synonymes :"<<endl;
cin>>m->nb_max_synonymes;
m->synonymes = new char*[m->nb_synonymes];
if(m->nb_synonymes>m->nb_max_synonymes)
cout<<"Erreur ressaisissez"<<endl<<endl;
}
while(m->nb_synonymes > m->nb_max_synonymes);
for (int i=0 ;i<m->nb_synonymes ; i++)
{
cout<<"Donnez le synonyme no "<<i+1<<" : ";
fflush(stdin);
m->synonymes[i]=saisir_chaine();
}
return m; <--- ce retour et peu être faux ?
}
dico* remplir_dico()
{
dico* d;
cout<<"Donnez la taille du dictionnaire : ";
cin>>d->taille_max;
d->tab = new mot*[d->taille_max];
cout<<"Combien voulez vous entrer de mots : ";
cin>>d->nb_mots;
for(int i=0 ; i< d->nb_mots ;i++)
{
fflush(stdin);
d->tab[i]=saisir_mot();// c'est cette ligne qui pose problème le dernier pointeur renvoyé se copie dans TOUTES les cases qui le précèdes
}
return d;
}
void afficher_dico(dico* d)
{
cout<<"Taille du dictionnaire : "<<d->taille_max<<endl;
cout<<"Nombre de mots : "<<d->nb_mots<<endl;
for(int i=0;i< d->nb_mots ;i++)
{
cout<<"Mot "<<i+1<<" :"<<endl<<endl;
afficher_mot(d->tab[i]);
}
}
int main()
{
dico *d;
d=remplir_dico();
afficher_dico(d);
return 0;
}
//Merci par avance pour votre aide