begin process at 2012 02 10 16:21:56
  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 question sur le C [ par zoneart ] Bonjour, J'ai une question sur le C: void exemple(const *char); int main(void) { char nom[20]; memset (nom, 0, 20); printf ("Entrez un nom : conversion de cstring en const char* [ par thejrem ] bonjour je devloppe en c sur visual studio 2008 et je test l'existance d'un fichier en faisant ceci mais j'ai un probleme if (dwMajorVersion == 5)// cherchet afficher un ou plusieurs ligne d'une fichier texte . [ par brell ] bon jour! cette fonction a comme parametre fichier contenant les messages et une chaine de caracteres contenant le destinateur. cette fonction permet question rapide : templates ... [ par kamuikun ] Bonjour, Petite question concernant les templates en C++ : En gros, j'ai une fonction qui peut avoir plusieurs variantes selon le type de son paramè Conversion d'un char[] en char*puis stocké en char*[] [ par Saigonoseme ] Bonjour à tous, J'ai un petit souci de conversion d'une chaîne de caractère dans un tableau de chaînes de caractère !!!(tAgTabTrame). (C'est pas agré Différence entre déclarations d'objet [ par skeleton18 ] Salut à toutes et à tous, Je ne suis pas vraiment un débutant en C++, mais j'ai une question de débutant... J'ai défini une classe Test comme ceci


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 3,510 sec (3)

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