2016-07-29 7 views
-1

EDIT: Wie ich schon sagte, ich weiß, dass diese Frage schon einmal gestellt wurde, aber keine der Lösungen schien für mich zu funktionieren. Bitte lesen Sie zumindest den Beitrag, bevor Sie ihn ablehnen und was nicht.Wie kann ich std :: cin Leseräume machen?

Ich weiß, dass diese Frage schon ein wenig auf dieser Seite gefragt wurde, aber ich kann nicht begreifen, wie man es mit meinem speziellen Programm zur Arbeit bringt. Im Wesentlichen kreiere ich ein kleines Mad Libs Spiel, bei dem der Spieler bestimmte Dinge eingeben muss, um sie in die Geschichte einzupassen. Nun, das funktioniert ganz gut, wenn es keine Leerzeichen in der Benutzereingabe gibt, JEDOCH der zweite jemand ein Leerzeichen einwirft, kann das Programm eine ganze Frage überspringen. Hier ist mein 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; 
    } 

Wie Sie sich wahrscheinlich vorstellen können, würden die meisten Menschen entscheiden sich, einen Raum zu bringen, wo es für den vollständigen Namen von jemand fragt (ich sicher weiß, ich würde). Punkt ist, wenn sie in diesen Raum gestellt werden, überspringt sie die "Verbrechensfrage" und geht einfach zur Adjektivfrage über. Es wäre von Vorteil, wenn ihr mir zeigen könntet, wie ich das richtig machen kann, da es mich ein wenig gestresst hat und alle Lösungen, die ich versucht habe, entweder das Problem verschlimmert oder nichts getan haben, um es zu beheben.

Danke, MTS

+2

Sie brauchen nur 'std :: getline' ... – LogicStuff

+0

Hinweis t Hut 'std :: cin' liest nichts. Es ist ein Objekt, das eine Schnittstelle zur Konsole bereitstellt. Es sind die ** Funktionen **, mit denen Sie Zeichen und Werte lesen. –

Antwort

1

Statt std::cin << nrfullname Sie müssen nur std::getline(std::cin,nrfullname [, delim])

std::getline extrahiert Zeichen aus dem Eingangsstrom und speichern das Ergebnis in nrfullname bis zum nächsten optionalen Begrenzer

0

Verwendung in std: : getline und schreiben: cin.getline(x,sizeof(x))