Remplir un string, probleme

Signaler
Messages postés
72
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
22 mai 2009
-
Messages postés
115
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
8 octobre 2007
-
Bonjour,


Je suis en 1ere année de BTS info.


J'ai un projet a realiser pendant ces vancances : une bibliotheque.


J ai un ptit probleme lors de l utilisation de "string". (lors de la saisie de texte)




si je declare une string comme :




string titre;


cin >> string;




Je ne peux pas taper d'espace (donc pour un titre c est genant).
Mais sans espace mon programme marche.



pareil avec la commande :


std::getline (cin, titre);


qui me fait un peu tout bugger (il prend le caractere espace comme une fin de saisie).




Comme c'est assez difficile d expliquer, j ai uppé mon projet :

[http://thibault33.free.fr/Dossier%20Partag%e9/Bibliotheque.rar http://thibault33.free.fr/Dossier% [...] theque.rar]




il n'est pas totalement fini (manque de commentaires)


Si vous voyez comment resoudre se probleme


merci d avance.




ps: je ne sais pas si le probleme de mon code vient specialement de la.
Si vous pouviez compiler mon code pour voir. J'utilise VC++6



code ou ca ne va pas :


<li>string auteur;
</li><li> string titre;
</li><li>


</li><li> cout << "Titre : ";
</li><li> std::getline(std::cin,titre);
</li><li>


</li><li> cout << "Auteur : ";
</li><li> std::getline(std::cin,auteur);
</li><li>


</li><li>


</li><li> switch (touche) </li><li> {
</li><li> case 1 : {
</li><li> unsigned nombrePages;
</li><li> cout << "Nombre de pages : ";
</li><li> std::cin >> nombrePages;
</li><li> documents.push_back(new Livre(auteur, titre, nombrePages));
</li><li> }
</li><li> break;</li>

7 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Deja, ya un truc qui me parait louche. "documents" c'est une liste ?

SI c'est le cas, ca me fait peur ca:

documents.push_back(new Livre(auteur, titre, nombrePages));



Peut etre que c'est moi qui reve, mais tu devrais plutot mettre;


documents.push_back(Livre(auteur, titre, nombrePages));



sauf si ta liste est composé de pointeur, mais ca m'étonnerait que tu es fait ca .



Sinon chez moi, il prend bien la ligne entière.
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Oublie ce que j'ai dis, c'est bien un vector de pointeur que tu as
défini. Et d'ailleurs pourquoi avec utiliser un vector plutot qu'une
list ? (meme si c'est pas la question)
Messages postés
72
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
22 mai 2009

c est le sujet qui demande un vector :)

ah tu testé mon programme ? compilation puis test.
peu etre que c est mon logiciel qui bug

teste en mettant des espaces dans le titre et l auteur.
merci
Messages postés
72
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
22 mai 2009

bon j ai modifié le tout pour que ca marche.
je dois terminer ma saisie par un point et c bon :

std::getline(std::cin,titre,'.');

a la detection du point, la saisie s arrete.
Ce qui est bizar c est que quand je mets :
std::getline(std::cin,titre,'\n'); (donc arret apres un retour a la ligne)
ca ne marche pas.
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Moi si je mets rien, ca marche, puisque par défaut, getline attend le retour à la ligne.
std::getline(std::cin,titre).
Ca marche quand je n'inclue que iostream et string, je sais pas si
sstream peut avoir une influence.


Je compile pas puisque je suis sous Dev moi, donc ca risque pas de marcher. Souvent des problèmes de librairies.
Messages postés
72
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
22 mai 2009

J ai trouvé d ou venez le probleme.
J utilise VC6 avec le dernier SP. Mais la fonction Getline est buggée.
microsoft propose une solution :
http://support.microsoft.com/default.aspx?scid=kb;en-us;240015#appliesto

une fonction aussi utilisée qui marche mal ...
Messages postés
115
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
8 octobre 2007

Essaye ca



char buffer[1024];

string titre;



cout << "Entrer un titre:\t: ";

cin.getline(buffer,1024);

titre = buffer;