2010-04-29 4 views
0

Programmation novice ici. J'essaye de permettre à un utilisateur d'entrer leur nom, firstName middleName lastName sur une ligne dans la console (ex "John Jane Doe"). Je veux rendre le middleName optionnel. Donc, si l'utilisateur entre "John Doe", il n'enregistre que les chaînes du prénom et du nom de famille. Si l'utilisateur entre "John Jane Doe", il sauvegardera les trois.C++ question d'espace blanc

j'allais utiliser:

cin >> firstName >> middleName >> lastName; 

je réalise que si l'utilisateur choisit d'omettre leur prénom et entre « John Doe » la console se contenteront d'attendre l'utilisateur d'entrer une troisième chaîne ... Je sais que je pourrais accomplir ceci avec une grande corde et la décomposer en deux ou trois, mais n'y a-t-il pas une manière plus simple de le faire avec trois cordes comme ci-dessus?

Je me sens comme si je manque quelque chose de simple ici ...

Merci à l'avance.

+0

Yeap, fixe. Merci! – buddyfox

Répondre

5

Utilisez getline, puis analysez en utilisant un stringstream.

#include <sstream> 

string line; 
getline(cin, line); 
istringstream parse(line); 

string first, middle, last; 
parse >> first >> middle >> last; 
if (last.empty()) swap(middle, last); 
+0

Puisque buddyfox est un débutant, je menace de supprimer mon vote parce que vous avez omis le préfixe 'std ::'. ':)' – sbi

+1

@sbi: lol, sur 'std ::' nous différons. Je préfère ne pas effrayer les débutants et ne pas me torturer, v). – Potatoswatter

+0

@sbi: Merci pour le correctif. –