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)

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é 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 Calculer barycentre [std::vector] [ par skone007 ] Voilà je suis toujours dans mon pseudo moteur 3D enfin bref je suis en train de coder un petite fonction pour calculer le barycentre enfin calculer le mail avec fichier joint [ par magic_Nono ] envoyer un mail on sait faire (faire ouvrir la boite d'envoi)le question est que j'aimerai de base rajouté un fichier que j'ai généré en fichier joint Problème avec quick sort avec des chaines de caractères [ par bakka72 ] Bonjour,Je dois réalisé un quick sort de chaines et jai u souci .1er. je parcourt kle fichier a trié pour compter le nombre délément 2eme je crée un t Probleme dans mon prog password dans la gestion ' * ' [ par Jarod1980 ] Salut,Voila j'ai développé un programme de password qui récupère le password crypté dans un fichier et le compare au password rentré par l'utilisateur problème d'ouverture et de lecture d'un fichier [ par Trinity_vv ] J'ai fais un code d'ouverture et d'affichage d'un fichier, tout marchait très bien. Sans exagérer 10 minutes plus tard, je le régénére et il ne veut p Quelle est cette erreur __w64 ? [ par themaste ] Bonjour à tous!Je suis en train de faire un programme, que j'avais fais sous dos avant.Puisque ca marchait, je l'ai repris pour faire une application question d'allocation probleme char char* Question simple [ par youpiyoyo ] voici mon probleme://///////////////////////////////////////////////////int rec = recv(ns,buffer,64*sizeof(char),0); buffer[rec] = '\0' ; //cout ouvrir un fichier avec devcpp [ par anek971 ] lut tout le monde,Bon j'ai fait un petit programme tout bete juste pour pouvoir ecrire une donné sur une personne ,dans le but d'agrementer ca plustar Manip' des variables du type char... [ par DJeS ] J'ai d'eternels problemes pour manipuler les variables char, const char etc...quand je veux faire passer un argument char a un fonction j'ai souvent d


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,718 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.