Je suis un peu confus par les résultats de la fonction suivante:fonctionnalité de cin en C++
int main() {
string command;
while(1) {
cin >> command;
if(command == "end")
return 0;
else
cout << "Could you repeat the command?" << endl;
}
return 0;
}
tout d'abord - la ligne de sortie (« pourriez-vous ... ») répète une fois pour chaque mot individuel dans l'entrée (stocké dans la commande). Pour autant que je puisse voir, il devrait seulement être possible que cela se produise une fois pour chaque instance de la boucle.
De même, lorsque la ligne 'if (commande == "end")' est remplacée par 'if (commande == "c'est-à-dire") ", elle ne se déclenche jamais. Un petit test a suggéré que tout l'espace blanc a été retiré de la commande.
Quelqu'un pourrait m'expliquer ce qui se passe ici?
Merci
Woah. Tant de choses. La première chose est que vous voulez utiliser getline http://www.cplusplus.com/reference/string/getline/ puisque tout espace est le délimiteur par défaut lors de la lecture d'un iostream. –
Vous remarquerez également que lorsque vous faites une chaîne (constante) == "constante", vous forcez la chaîne constante dans un objet chaîne. Si jamais vous avez une chaîne C (comme appeler command.c_str()), vous voulez utiliser strcmp() pour comparer les chaînes pour l'égalité, pas ==, car == comparerait normalement les adresses des chaînes référencées. –
@Compiluous Compiler - Ces 2 commentaires font la meilleure réponse, vous devriez posté +1 sur vos commentaires. Testant particulièrement les chaînes avec ==. – JonH