Classes abstraites, String probleme - C++ - Programmation
Marsh Posté le 20-04-2005 à 16:36:28
Il doit y avoir une soluce, mais sinon utilise scanf tout bêtement.
Marsh Posté le 20-04-2005 à 16:39:41
je viens de tester la fonction
mais il lui faut un char* et non un string
j ai pas envie de changer tous mes string en char*
Marsh Posté le 20-04-2005 à 16:43:49
Donc tu n'a jamais de C, c'est dommage.
Très simple, syntaxe:
Code :
|
Si tu veux plus de détail prends n'importe quel cours sur le C tu trouveras plein d'explication
Marsh Posté le 20-04-2005 à 16:45:27
Pookie a écrit : je viens de tester la fonction |
Arf dommage, il doit y avoir d'autre soluce mais perso je ne m'y connait pas assé en C++ pour ça
Marsh Posté le 20-04-2005 à 18:02:58
skelter a écrit : meme en C tu ne t'y connais pas, ta soluce est buggée |
étant donné que c'est du C++ que je pensé faire et non du C forcément ça marche pas en C
Je sais que scanf fonctionne en C++ mais je savais pas qu'il prenait pas les string
Marsh Posté le 20-04-2005 à 18:05:34
je pensais qu on pouvais utiliser la fonction cin pour remplir le contenu d'un string.
Il doit surement exister une autre fonction.
mais je n'ai pas la msdn sous la main
Marsh Posté le 20-04-2005 à 18:32:14
Citation : |
et pourtant ça devrait être bon. Tu dois avoir une histoire de '\n' qui traine, à cause de cin utilisé directement.
N'utilise que getline() et analyse la ligne obtenue avec un istringstream, ou bien avant chaque getline() fait un cin.ignore().
Marsh Posté le 20-04-2005 à 19:25:50
NON METS JE REVE OU QUOI ?
faut attendre 10 postes pour que quelqu'un sorte enfin std::getline !
Marsh Posté le 20-04-2005 à 21:19:01
non se n'est pas ca.
j utilise un :using namespace std;
je crois savoir d ou vient le probleme.
donc : std::getline(cin, variable, '\n');
il detecte mal le retour a la ligne et fait planté le programme.
alors que : std::getline(cin, variable, '.'); (donc je termine ma saisie par un point) marche tres bien.
je sens que jvais virer ces string ^^
Marsh Posté le 20-04-2005 à 21:28:33
sans le dernier argument, je ne peux pas rentrer d espace dans ma saisie.
Il y a peu etre un autre probleme dans mon code.
Si vous pouviez y jeterun ptit coup d oeil, le probleme se trouve dans le fichier "bibliotheque.cpp"
Marsh Posté le 20-04-2005 à 21:30:05
mais bien sur que si !
faut arrêter la drogue.
std::getline marche niquel
fais un test
if(!std::getline(std::cin, ligne)) { erreur }
Marsh Posté le 20-04-2005 à 21:34:08
donc je dois avoir une autre erreur quelques part
peu etre que mon VC6 bug ^^
jvais regarder ca de plus pret
Marsh Posté le 20-04-2005 à 22:24:12
Code :
|
avec le debugger pas a pas, je remarque que le programme prend bien les getline, puis rentre dans dans le switch et la il saute carrement le cin>>nombrePages;
Marsh Posté le 20-04-2005 à 22:27:03
Sebou77 a écrit : Donc tu n'a jamais de C, c'est dommage.
|
Marsh Posté le 20-04-2005 à 22:40:24
Marsh Posté le 20-04-2005 à 22:50:38
C'es tes cin directs qui fouttent la merde, dans le style:
Code :
|
Comme je te l'ai dit:
Citation : Tu dois avoir une histoire de '\n' qui traine, à cause de cin utilisé directement. |
Donc on reprend, soit tu modifies tes cin directs ainsi:
Code :
|
soit tu vides avant les getline / après les cin:
Code :
|
Marsh Posté le 20-04-2005 à 23:20:37
je ne connais pas trop ces methodes, mais j ai essayé de les appliquer. Ca marche a peu pret ^^ (c deja pas mal) (methode 1)
mais il y a 1 ptits problemes :
dans mon code je dois rentrer : l auteur, le titre et le nombre de pages.
j utilse un push_back, mais le titre reste une chaine nulle et le nombres de pages prensd nimporte kelle valeur.
desoler je debute
Code :
|
Marsh Posté le 20-04-2005 à 23:24:12
Faut le faire partout. Comment est saisi touche ?
Marsh Posté le 20-04-2005 à 23:33:42
C'est presque à se demander si son getline nest pas buggé...
Remarque c'est possible s'il utilise une version du compilateur de microsoft qui date un peu...
Marsh Posté le 20-04-2005 à 23:34:39
moi je voudrais que vous commenciez a vérifier TOUS les codes de retours des fonctions.
Marsh Posté le 20-04-2005 à 23:40:39
C'est vrai que ça serait bien mais ça n'explique pas pourquoi ça marche pas en tapant ce qu'il faut (enfin je suppose que c'est ce qu'il fait).
Bien sûr si on lui donne pas ce qu'il attend c'est normal que ça fasse ça.
Marsh Posté le 20-04-2005 à 23:48:06
vous avez tout mon code source
fichier bibliotheque.cpp principalement
mon VC6 est a jour et je pense que le reste de mes fonctions sont bonnes (puisqu avec des cin tous simple, en ne rentrant pas d espace ,ca marche)
il doit y avoir une ptite erreur que je n arrive pas a voir apres 8h de code
edit : le code dispo sur mon ftp n est pas modifié avec les redirections.
Marsh Posté le 21-04-2005 à 08:35:29
C'est bon j'ai trouvé le problème, c'est bien getline qui est buggé avec VC6
Fais la correction proposé ici :
http://support.microsoft.com/defau [...] -us;240015
Et rajoute ça avant le 1er getline :
cin.sync();
Marsh Posté le 21-04-2005 à 08:39:05
quelle merde ...
ça pue d'avoir un OS avec une lib C++ bugguée jusqu'à l'os
Marsh Posté le 21-04-2005 à 09:16:03
sachant que getline est quand meme une des fonctions les plus utilisés en C++, ça me fait frémir ce bug. Y a pas un smiley avec VC6 interdit ou du genre ?
Marsh Posté le 21-04-2005 à 11:01:47
Taz a écrit : quelle merde ... |
Revoie tes bases, l'OS n'a rien à voir là dedans.
Citation : Et rajoute ça avant le 1er getline : |
je crois que le comportement de cin.sync() n'est pas normalisé, ça dépend des implémentations / OS.
Mieux vaut faire un ignore(), un peu comme je le dit depuis le début.
Faudrait vérifier les valeurs saisies aussi, notamment au niveau de la conversion en entier.
Code :
|
Pour en revenir au bug, je suis pas sûr qu'il soit la cause du problème, surtout s'il a le dernier SP de VC++. Et s'il est bien en cause, c'est un argument de plus pour dire de passer à quelque chose de plus récent qu'un compilo qui a 7 ans.
Mais même sur un compilo non buggé, le code suivant va merder:
Code :
|
a condition de renter 1, l'auteur sera vide.
Marsh Posté le 21-04-2005 à 11:28:39
HelloWorld a écrit : Revoie tes bases, l'OS n'a rien à voir là dedans. |
heink ? ou j'ai dit que c'était l'OS ?
cin, cerr, clog sont .tie()'és à cout, c'est standardisé, il n'y a pas besoin de sync()'er quoi que ce soit
Marsh Posté le 21-04-2005 à 11:30:43
Pour le cin.sync, c'est vrai que ça ne doit pas être normalisé.
C'est juste que j'aime pas trop la bidouille avec le ignore.
En ce qui concerne VC6, je viens de remarqué que j'avais que le SP5 (dsl mais je l'utilise presque jamais).
Je vais vérifier avec le SP6, mais sinon chez moi ça cause bien le problème.
D'ailleurs impossible de reproduire le même problème après avoir fait la correction sur le site donc pookie n'a peut-être pas la dernière version ou alors elle est buggée aussi (je vais tester mais ça télécharge pas vite).
Marsh Posté le 21-04-2005 à 11:44:30
le coup du ignore, c'est pas de la bidouille, et c'est une bonne façon de faire. Voir le BS.
Marsh Posté le 21-04-2005 à 12:04:57
ca marche je vous remercie tous
avec un cin.sync();
Bon maintenant je n ai plus qu a detecter les erreurs et j aurai fini.
Je vous remercie encore
bonne journée
edit : vous utilisez quel compilateur ? car moi j utilise vc6 car on l utilise en cours.
J aurai pu aussi le faire en VC7 ou avec une plateforme java (ca aurai ete plus simple pour les getline ...)
+
Marsh Posté le 21-04-2005 à 14:33:47
Taz a écrit : cin, cerr, clog sont .tie()'és à cout, c'est standardisé, il n'y a pas besoin de sync()'er quoi que ce soit |
c'est Taz qui a écrit ça ?
Marsh Posté le 21-04-2005 à 17:18:51
Taz a écrit : heink ? ou j'ai dit que c'était l'OS ? |
juste avant:
Citation : ça pue d'avoir un OS avec une lib C++ bugguée jusqu'à l'os |
Citation : Pour le cin.sync, c'est vrai que ça ne doit pas être normalisé. |
cin.sync(), c'est grosso modo équivalent à fflush(stdin) en C.
Marsh Posté le 21-04-2005 à 22:47:11
Citation : cin est .tie()'é à cout, pas cerr ni clog. C'est standardisé, il n'y a pas besoin de "flusher" quoi que ce soit pour cin <-> cout (encore moins .sync()er ) |
l'apéro bordel !
Marsh Posté le 20-04-2005 à 16:27:14
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).
pareil avec la commande :
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% [...] theque.rar
il n'est pas totalement fini (manque de commentaires)
Si vous voyez comment resoudre se probleme
merci d avance.
code ou ca ne va pas :
Message édité par Pookie le 20-04-2005 à 16:38:43