begin process at 2010 02 10 09:55:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

remplissage d'un std::list


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

remplissage d'un std::list

dimanche 26 juin 2005 à 15:35:33 | remplissage d'un std::list

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.
   
dimanche 26 juin 2005 à 16:18:03 | Re : remplissage d'un std::list

vecchio56

Administrateur CodeS-SourceS
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?
dimanche 26 juin 2005 à 17:22:28 | Re : remplissage d'un std::list

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.


dimanche 26 juin 2005 à 17:27:32 | Re : remplissage d'un std::list

vecchio56

Administrateur CodeS-SourceS
Quel est le problème alors, si tu arrives a afficher les infos?
dimanche 26 juin 2005 à 17:35:15 | Re : remplissage d'un std::list

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

dimanche 26 juin 2005 à 17:48:12 | Re : remplissage d'un std::list

vecchio56

Administrateur CodeS-SourceS
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; ... }
dimanche 26 juin 2005 à 17:55:38 | Re : remplissage d'un std::list

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


dimanche 26 juin 2005 à 18:12:58 | Re : remplissage d'un std::list

vecchio56

Administrateur CodeS-SourceS
Ta librairie graphique n'a pas à les 'prendre en charge'. Les strings font partie intégrante du compilateur C++
dimanche 26 juin 2005 à 20:06:43 | Re : remplissage d'un std::list

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

dimanche 26 juin 2005 à 21:56:59 | Re : remplissage d'un std::list

Kaid

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

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


Kaid - kaid.fr.st


Cette discussion est classée dans : fichier, question, const, char, std


Répondre à ce message

Sujets en rapport avec ce message

question sur les variables [ par Kernox ] Bjr,Je doit lire un fichier txt de plusieurs lignes et avec des lignes dune longeur differente.Je veux savoir comment peut ton faire quelque chose com Inserer un fichier texte dans un const char Fichier[]... [ par pinkfloydhighopes ] bonjour, tout est dans le titre... je suis en trin de faire un système d'exploitation en elf qui utilise le multiboot de grub. je cherche depuis pomal recherche fichier séquentiel [ par peter2010 ] Bonjour, j'ai un fichier séquentiel contenant des informations séparées par des ; qui contient l'inventaire d'une épicerie,en paramètre j'ai le nom du [DOS]Question .bat [ par lakeeee ] Salut, Je voudrais créer un fichier .bat pour lancer un programme .exe qui s'exécute dans une fenêtre DOS. Mon programme se lance bien avec la comman Etendre std::string(char *) pour utiliser nos references de char[] a l'interne [ par ebeaumier ] Bonjour,Je dois appeler une API externe qui ne prend que des "const string &" et nous utilisons a l'interne des char[].Est-il possible d'étendre la cl Fichier hexa, creation de BMP [ par mikax31 ] Bonjour à tous, voilà un petit moment que je cherche en vain la réponse à ma question...Mon objectif : à partir d'un fichier binaire contenant les don Impossible d'écrire dans un fichier [ par snpier wolf ] Bonjours à vous, Je suis entrain de créer un Logeur, il fonctionne pour loguer un message dans une Message Box dans une console mais pas dans un fichi suppression d'une structure dans un fichier [ par ragon ] bonjour, je souhaite simplement supprimer toute une structure d'un fichier, mais je n'y arrive pas. Voila mon code, j'ai essayé un truc mais ca fonct Question sur object string [ par lektrosonic ] Bonjour,est ce que l'object peut contenir des unsigned char au lieu de char ?Mercil3KTr0 Was HeRe


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,546 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales