cs_pounch
Messages postés12Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention22 novembre 2003
-
21 nov. 2003 à 16:21
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
22 nov. 2003 à 17:01
bon voila mon probleme
j'aimerai parser une ligne de commande grace au cin et afficher un prompt lorsque j'ai fini de parser. Mais le cin n'a pas de methode pour connaitre la fin de la ligne parser ( ou bien je la connais pas ... ce qui est tout à fait possible ^_^ ) donc mon idée c'est de surcharger "operator>>" afin d'acceder à la variable protected "streamsize" dans le but de connaitre la fin du buffer et ainsi afficher ce pu... de prompt !!!!
Merci d'avance ^_^
il existe 10 types de gens ceux qui savent compter en binaire et les autres.
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 21 nov. 2003 à 18:58
j'avoue ne pas comprendre ou tu ve en venir, j'ai relu ta question, pour parser une commande, il faut que tu la recupere dans un char[] (normal non?)
alors pourquoi tu fait pas tout simplement
cin.getline(cmd,sizeof(cmd)) ?
cs_pounch
Messages postés12Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention22 novembre 2003 22 nov. 2003 à 14:59
effectivement j'ai po ete tres clair ( mais desolet 1000x car j'etais press" ;) )
bon en fait mon probleme c'est que j'ai un prompt qui resemble à ca :
> ( ici les commandes )
le probleme c'est que quand j'execute mon algo de traitement de chaine avec le std::cin >> truc et bien ca donne soit ca :
> 5 6 3
> > >
car je reaffiche à chaque fois le ">" soit :
> 5 3 6
( ici plus rien, mais on peu continuer à ecrire )
J'ai effectivement trouve un moyen de contourner le probleme en utilisant le std::cin.find(...), mais c'est po top beau comme code ( et c'est pas tres oriente objet :D ) enfin bref.
J'aimerais "simplement" surcharger iostream ( et non pas cin comme je l'avais dit ) afin de pouvoir redefinir la double indirection ( ">>" ).
Ainsi je pourrais juste faire "std::cin >> truc" et automatiquement en fin de buffer j'afficherai un nouveau prompt. Genre ca:
> 5 3 6
> ...
>
Merci d'avance ^_^
il existe 10 types de gens ceux qui savent compter en binaire et les autres.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 22 nov. 2003 à 15:25
>> est un operator de istream, tu pourra pas le surcharger dans iostream, ensuite pour le surcharger(a l'exterieur de istream) :
istream& operator >> (istream& i,const T& mot)
{
return i>>mot>>(ce que tu ve);
}
> j'ai mis T comme type car si j'avais mis char* yorai surcharge
mais si je comprend bien tu ve enfaite qu'un prompte s'affiche apres chaque saisie de commande?
parce que si c'est le cas je voit pas comment surcharger >> peut resoudre ton probleme
en fait il suffit de faire cout<<'>'; non?
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 22 nov. 2003 à 17:01
ah! je vien de comprendre ton probleme!
en effet si je fait
for(;;)
{
cout<<"> ";
cin>>cmd;
...
}
et que je saisi
>kfjdkjf fkfl f fkj
j'aurai
>>>>
la solution est de faire cin.getline(cmd,sizeof(cmd); au lieu de cin>>cmd; et ensuite de recuperer chaque commande dans cmd(puisque tu sai qu'elles sont séparé par des espaces)
c'est plus propres de faire comme ca!
bonne chance