begin process at 2008 08 20 14:49:51
1 228 884 membres
250 nouveaux aujourd'hui
14 258 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : remplissage d'un std::list [ Archives / Au secours ] (boun85)

remplissage d'un std::list le 26/06/2005 15:35:33

boun85
Voila mon probleme est assez simple je pense mais je n'arrive pas a le resoudre.
Voila j'ai une fonction qui lit un fichier et qui rempli une std::list<Question *> a partir des infos qu'il a lu.
La class Question est defini ainsi :
class Question
{
    private :
        const char *intitule;
        const char *repA;
        const char *repB;
        const char *repC;
        const char *reponse;
    public :
        Question(const char * sujet,const char* rep1, const char * rep2, const char* rep3, const char * rep);
        Question();
};

Voila la fonction :
std::list<Question *> sesQuestions;
void lireQuestions()
{
    int nbQuest, lu=0;
    char intitule[200], repA[50], repB[50], repC[50], goodRep[2];
    std::ifstream fichier("files/Questions.txt");
    fichier >> nbQuest;   fichier.ignore();
   
    while(lu<nbQuest)
    {
          fichier.getline(intitule,200);
          fichier.getline(repA,50);
          fichier.getline(repB,50);
          fichier.getline(repC,50);
          fichier.getline(goodRep,2);
          Question * q = new Question(intitule,repA,repB,repC,goodRep);
          sesQuestions.push_back(q);
    }
    fchier.close();
}

Le probleme ne se situe pas vraiment dans la lecture du fichier puisqu'il est bien lu (les variables prennent les bonnes valeurs) mais dans l'insertion dans la list.En fait aucune infos n'est inserer dans la liste juste des pointeurs sur des valeurs incomprehensible. Je pense a un probleme dans un pointeur mais si je fais :
    Question * q = new Question("Une question","reponse A", "reponse B", "reponse C","a");
    sesQuestions.push_back(q);
 
ca marche donc je vois pas d'ou ca vient , je suis completement perdu alors s'il vous plait aidez moi .

Merci a celui qui aura eu le courage de lire tout et de me repondre.
   

Re : remplissage d'un std::list le 26/06/2005 16:18:03

vecchio56
(Admin CS)
Qu'est ce qui te fait dire que les infos ne sont pas bien insérées? Peut que tout simplement tu ne sais pas relire une liste. Tu utilises un itérateur pour cela?

Re : remplissage d'un std::list le 26/06/2005 17:22:28

boun85
Je sais bien relire les infos insere puisque je les affiche plus tard dans le programme et pour cela j'utilise effectivement un const_iterator.



Re : remplissage d'un std::list le 26/06/2005 17:27:32

vecchio56
(Admin CS)
Quel est le problème alors, si tu arrives a afficher les infos?

Re : remplissage d'un std::list le 26/06/2005 17:35:15

boun85
jy arrive kan je fai
    Question * q = new Question("Une question","reponse A", "reponse B", "reponse C","a");
    sesQuestions.push_back(q);

mai pas si je passe en parametre du constructeur les variables ke je recupere lors de la lecture du fichier c pour ca ke je compren rien surtout ke ces varaibles contiennent bien les bons textes


Re : remplissage d'un std::list le 26/06/2005 17:48:12

vecchio56
(Admin CS)
Réponse acceptée !
C'est dans ce cas ton constructeur de question qui ne doit pas être bon: dans lireQuestions, repA, repB... sont les mêmes pour tous les objets Question (variables locales). Dans le constructeur, fais-tu une nouvelle allocation pour les attributs repA, repB... ou une simple affectation. Ce que tu devrais faire: Question::Question(const char * sujet,const char* rep1, const char * rep2, const char* rep3, const char * rep) { repA = new char[strlen(rep1)]; strcpy(repA, rep1); ... } Si tu ne modifies plus ces chaines par la suite, tu as grandement intérêt à utiliser des str::string à la place de ces char*. Dans ce cas une simple affectation dans le constructeur suffira: Question::Question(string& sujet, string& rep1, string& rep2, string& rep3, string& rep) { repA = rep1; repB = rep2; ... }

Re : remplissage d'un std::list le 26/06/2005 17:55:38

boun85
Fodra que j'essaye ca . pour ce ki est des string j'avai deja essayé mai comme j'utilise une librairie graphique qui ne les pren pa en charge je les avai virer pour etre sur ke ca venai pa de la.
J'essaye ca et jte tien au couran



Re : remplissage d'un std::list le 26/06/2005 18:12:58

vecchio56
(Admin CS)
Ta librairie graphique n'a pas à les 'prendre en charge'. Les strings font partie intégrante du compilateur C++

Re : remplissage d'un std::list le 26/06/2005 20:06:43

boun85
Je te remercie ca marche et ca ma meme permis de corriger d'autres bugs dont je viens de me rendre compte.
En fait ce que je voulais dire par 'ne les prend pas en charge' c'est juste que je peu pas directement les passé en paramètre pour les fonctions d'affichage de texte mais je peut bien sur faire un .c_str() pour les mettre en char * mais comme ca bugguai j'preferai faire directement des char *.

Enfin bon merci encore pour ton aide


Re : remplissage d'un std::list le 26/06/2005 21:56:59

Kaid
Ne pas oublier le caractère supplémentaire pour stocker le '\0' final:

repA = new char[strlen(rep1) + 1]


Kaid - kaid.fr.st


Classé sous : fichier, question, const, char, std

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS