Ma question est la suivante je veux commander un programme avec des instructions aux clavier
ma méthode actuelle est
cin >> keyword >> arg1 >> arg2 >> arg3
Le problème c'est que si une instruction n'a pas besoin d'auto argument il faut quant même que je les entres ( cas trivial EXIT devient EXIT 0 0 0 )
Quelle est la méthode pour pouvoir faire quelque chose du genre
cin >>; xxx ( ou xxx contient tout )
puis de splitter xxx dans un tableau ou vecteur... ( un peu à la perl par exemple )
j'imagine qu'il faut soit envoyer dans une string soit dans un stream ?
Merci d'avance
# cin trop limité
Posté par sn00py . Évalué à 0.
donc, pour ton truc, soit tu connais la taille maximum de la chaine que peut saisir ton utilisateur, ça devient :
char chaine[32]; //oui, on code en C++ avec la STL
cin.getline(chaine, 32);
stringstream ss(chaine);
ss >> keyword;
if (keyword == "kikko") { ss >> a; ss >> b; }
Si tu ne connais pas la taille maximum, il te reste à faire un truc du genre :
string chaine;
while (1) {
char c = cin.get();
if (c == '\n') break;
chaine += c;
}
... //la suite est la même.
Galère bien avec les streams de la STL !!
[^] # Re: cin trop limité
Posté par lmg HS (site web personnel) . Évalué à 2.
std::istream::getline n'existe pas. C'est une illusion d'optique. Oublie l'existence de ce truc tout pourri.
Par contre, avec std::getline, c'est différent.
La solution à la main:
Autant dire que la gestion des erreurs complique vite la sauce.
Il y a aussi des solutions pour utiliser des parsers (lex/yacc si tu es courageux, boost.spirit si ce que tu dois parser est simple, ANTLR, ....)
Enfin, ton problème me fait penser aux chain-factories. Tu pourrais ainsi créer ta commande à la volée et l'exécuter par la suite.
PS: Les flux n'ont jamais fait parti de la STL (qui n'est qu'une appellation historique pour un sous-ensemble de la SL du C++). Ils sont dans la SL.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.