begin process at 2010 02 10 16:07:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

surcharge de l'operateur ">>" du cin


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

surcharge de l'operateur ">>" du cin

vendredi 21 novembre 2003 à 16:21:26 | surcharge de l'operateur ">>" du cin

pounch

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.
vendredi 21 novembre 2003 à 17:05:35 | Re : surcharge de l'operateur

djl

ya bien cin.eof()
vendredi 21 novembre 2003 à 18:30:28 | Re : surcharge de l'operateur

pounch

Voici mon code de test

for (;;) {

std::cout << "> ";
std::cin >> cmd;

while (!std::cin.eof()) {

std::cin >> cmd;

if (atoi(cmd) || (cmd[0] == '0')) {
pile->push(atoi(cmd));
} else if (convert[cmd]) {
(convert[cmd])->eval(pile);
} else
std::cout << "operateur inconnu !" << std::endl;
}
}

lorsque je l'execute j'ai une boucle infini :( SNIFFF !!! ca marche po :((((

il existe 10 types de gens ceux qui savent compter en binaire et les autres.
vendredi 21 novembre 2003 à 18:58:36 | Re : surcharge de l'operateur

djl


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)) ?
samedi 22 novembre 2003 à 14:59:21 | Re : surcharge de l'operateur

pounch

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.
samedi 22 novembre 2003 à 15:25:27 | Re : surcharge de l'operateur

djl


>> 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?
samedi 22 novembre 2003 à 15:47:24 | Re : surcharge de l'operateur

pounch

10000000000000000000000000000000000000000000000x merci c'est exectement ce que je voulais faire !!!

pour ta seconde question en fait le prob c'est que je faisais ca :

for(;;) {

std::cout << "> "; // ici j'affichais le prompt
std::cin >> cmd; //et la je parsais

/*
j'avais donc le prompt qui s'afficher autant de fois que
j'avais de commandes
*/

if (atoi(cmd) || (cmd[0] == '0')) {
pile->push(atoi(cmd));
} else if (convert[cmd]) {
(convert[cmd])->eval(pile);
} else
std::cout << "operateur inconnu !" << std::endl;
}
}

mais y'avais pit etre moyen de faire autrement ????
d'alleiur si tu as une idee je suis preneur !!

merci encore

il existe 10 types de gens ceux qui savent compter en binaire et les autres.
samedi 22 novembre 2003 à 17:01:19 | Re : surcharge de l'operateur

djl


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


Cette discussion est classée dans : ligne, parser, surcharge, operateur, cin


Répondre à ce message

Sujets en rapport avec ce message

c++ -> surcharge d'ope et heritage ... [ par Alligokouax ] je suis vraiment au bord du suicide, j'ai exam dans trois jours ... et c la merdecomment peux on faire et est ce que cela existe :utiliser la surcharg Surcharge d'operateur [ par AngeloVivaldi ] Salut, je voudrai redefinir cout dans de iostream.h pour qu'il affiche un membre de ma class au lieu d'afficher l'adresse de l'objet :Par exemple, pou Surcharge d'operateur [ par jfk20004 ] Est il possible de m'expliquer clairement la surcharge d'operateurs:Ce que je sais :souvent utilisé dans les redefinition de classes mathematiques.PRO surcharge d'operateur dans une classe [ par jfk20004 ] Est ce que la surcharge d'operateur intervient chaque fois que l 'on definit une classe.Franchement je n'ai pas encore capté le pourquoi de la surchar Vector affichage [ par heleos ] Slt tout le monde, voila j ai un probleme avec ceci : int main() {    std::vector x(1);          int choix;       disMen surcharge operateur de flux >> en c++ [ par kawito ] bonjour,je realise une classe Chaine en c++, et j'aimerais savoir comment surcharger l'operateur >> friend istream& operator>>(istream& i, Chaine& s){ saisie d'une ligne [ par oligator ] Salut je veux saisir une chaîne de caractere telephonecin le format est (999) 999-9999il y a un espace entre la parenthese et le prochain 9y'a t'il un Retourner à la ligne précédente et changer le couleur dans un cin . [ par Muner ] Salut à tous .Je programme en C++ et j'aimerais savoir comment revenir une ligne auparevent, le code :cout "\b" ;ne permet pas de passer à la ligne p question sur les surcharges et les fonctions amies en c++ [ par maymouna2008 ] salut tt le monde je veux que vous m expliquer et me donne des reponse ,svp c est urgent,  sur un programme en c++:c est un probleme d une fonction ma parser un fichier xml avec tinyxml [ par rabebs ] Bonjour tout le monde Je cherche à récupérer des valeurs des balises se trouvant sous d'autres balises comme:<pre class="alt2" dir="ltr" style="border


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,764 sec (4)

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