2016-07-29 2 views
-1

EDIT: Comme je l'ai dit, je sais que cette question a été posée auparavant, mais aucune des solutions ne semblait fonctionner pour moi. S'il vous plaît, au moins lire le message avant de le downvoter et quoi-non.Comment créer des espaces de lecture std :: cin?

Je sais que cette question a déjà été posée sur ce site auparavant, mais je n'arrive pas à comprendre comment l'utiliser avec mon programme particulier. Essentiellement, je crée un petit jeu de type Mad Libs où le joueur doit entrer dans certaines choses afin de l'insérer dans l'histoire. Maintenant, cela fonctionne parfaitement bien s'il n'y a pas d'espace dans l'entrée de l'utilisateur, cependant, la seconde personne jette dans un espace, le programme peut ignorer une question entière. Voici mon code:

int main(){ 

int selection; 

//News Report Variables 
std::string nrfullname; 
std::string nrcrime; 
std::string nradjective; 
std::string nrtown; 
std::string nrpluralnoun; 
std::string nrnounnotplace; 
std::string nrverb; 
std::string nradjective2; 
std::string nrfullname2; 
std::string nrnounnotplace2; 

std::cout << "Welcome to Mad Libs! Please, pick a story!" << std::endl; 
std::cout << "1. News Report" << std::endl; 
std::cin >> selection; 

if (selection == 1) { 
    std::cout << "We need a full name of someone." << std::endl; 
    std::cin << nrfullname; 
    std::cout << "We need a crime." << std::endl; 
    std::cin >> nrcrime; 
    std::cout << "We need an adjective." << std::endl; 
    std::cin >> nradjective; 
    std::cout << "We need a town." << std::endl; 
    std::cin >> nrtown; 
    std::cout << "We need a plural noun." << std::endl; 
    std::cin >> nrpluralnoun; 
    std::cout << "We need a noun that is NOT a place." << std::endl; 
    std::cin >> nrnounnotplace; 
    std::cout << "We need a verb." << std::endl; 
    std::cin >> nrverb; 
    std::cout << "We need another adjective." << std::endl; 
    std::cin >> nradjective2; 
    std::cout << "We need a full name of someone else." << std::endl; 
    std::cin >> nrfullname2; 
    std::cout << "We need another noun that is NOT a place." << std::endl; 
    std::cin >> nrnounnotplace2; 
    } 

Comme vous pouvez l'imaginer, la plupart des gens choisiraient de mettre un espace où il demande le nom de quelqu'un (je sais que je le ferais). Le point est, s'ils mettent dans cet espace, il saute la question de «crime» et passe simplement à la question d'adjectif. Il serait utile que vous me montriez comment faire fonctionner correctement ce système, car cela m'a stressé un peu et toutes les solutions que j'ai essayées ont aggravé le problème ou n'ont rien fait pour aider à le résoudre.

Merci, MTS

+2

Vous avez juste besoin de 'std :: getline' ... – LogicStuff

+0

Note t Le chapeau 'std :: cin' ne lit rien. C'est un objet qui fournit une interface à la console. Ce sont les ** fonctions ** avec lesquelles vous appelez qui lisent les caractères et les valeurs. –

Répondre

1

Au lieu de std::cin << nrfullname il vous suffit d'utiliser std::getline(std::cin,nrfullname [, delim])

std::getline caractères extraits de flux d'entrée et stocker le résultat dans nrfullname jusqu'à ce que le prochain optionnel delimiter

0

utilisation dans std: : getline et écrire: cin.getline(x,sizeof(x))