2016-07-29 16 views
-1

EDIT: Как я уже сказал, я знаю, что этот вопрос был задан раньше, но ни одно из решений, похоже, не работало для меня. Пожалуйста, по крайней мере, прочитайте сообщение перед тем, как спустить его и что-нет.Как я могу сделать std :: cin чтение пробелов?

Я знаю, что этот вопрос задан на этом сайте раньше, но я не могу понять, как заставить его работать с моей конкретной программой. По сути, я создаю игру Mad Mad Libs, в которой игрок должен входить в определенные вещи, чтобы вписаться в историю. Теперь это работает отлично, если в пользовательском вводе нет пробелов, ОДНАКО, второй кто-то выбрасывает пробел, программа может пропустить весь вопрос. Вот мой код:

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; 
    } 

Как вы можете себе представить, что большинство людей предпочли бы поставить пространство, в котором он просит полное имя кого-то (я уверен, что знаю, что будет). Дело в том, что если они помещаются в это пространство, он пропускает «преступный» вопрос и просто переходит к вопросу о прилагательном. Было бы полезно, если бы вы, ребята, могли показать мне, как заставить это работать правильно, поскольку это немного меня подтолкнуло, и все решения, которые я пробовал, либо сделали проблему хуже, либо ничего не сделали, чтобы помочь исправить ее.

Спасибо, МТС

+2

Вам просто нужно 'std :: getline' ... – LogicStuff

+0

Примечание t hat 'std :: cin' ничего не читает. Это объект, который предоставляет интерфейс для консоли. Это ** функции **, которые вы вызываете с ним, чтобы читать символы и значения. –

ответ

1

Вместо std::cin << nrfullname вы просто не использовать std::getline(std::cin,nrfullname [, delim])

std::getline извлекает символы из входного потока и сохранить результат в nrfullname до следующего дополнительного разделителя

0

использования в станд: : getline и написать: cin.getline(x,sizeof(x))