2014-01-25 5 views
0

Я новичок в коде и на этом сайте, поэтому, пожалуйста, простите меня, если я пропущу что-то очевидное. Я пытаюсь написать короткую маленькую игру на C++, и мне нужно взять пользовательский ввод. Я хочу взять более одного слова, поэтому команда cin>>, которую моя книга рекомендует, прямо сейчас. Лучшее, что я нашел в ходе исследования, это команда getline(cin,var);. Я могу заставить это легко работать в малогабаритных тестах, но когда я реализую его в своей 500-линейной игре, он никогда не работает. Он пропустит этот бит кода, не дожидаясь ввода imput пользователя, и установите переменную в пустое пространство. Я не буду включать весь код, очевидно, но вот бит, о котором идет речь, и мои заголовки.Что-то мешает функции getline?

#include <cstdlib> 
#include <windows.h> 
#include <iostream> 
#include <string> 
using namespace std; 
string poemend; 
int heading; 

int poem() 
{ 
    system("CLS"); 
    cout<<"This poem is almost done, you just can't seem to find the perfect last word.\n"; 
    cout<<"You can see several of your discarded endings. Most recently, 'pain'.\n\n"; 
    cout<<"How about another go?\n>"; 
    getline(cin,poemend); 
    system("CLS"); 
    cout<<"The Prophet's old parrot spoke much of all things,\n"; 
    cout<<"but when asked about love, squawked only "; 
    cout<<poemend<<" .\n\n"; 
    Sleep(6000); 
    cout<<"You decide it could still use some work"; 
    Sleep(3000); 
    heading = 6; 
} 

Опять же, это работает отлично, если я беру это в новую пустую страницу, так что я на самом деле не уверен, что стоит на пути. Я буду рад ответить на любые вопросы о коде и опубликовать более полезные фрагменты, если это необходимо. Большое вам спасибо за то, что нашли время, чтобы прочитать это!

+0

Pls использовать немного отступы –

+0

код, который вы не показывает нам это проблема. – 0x499602D2

+0

Код, который вы показываете нам здесь, не представляет проблемы. Можете ли вы разместить больше кода, связанного с потоком? – 0x499602D2

ответ

0

Иногда промывка входного буфера является магии. Это может быть или не быть в вашем senario, но попробуйте этот код.

cin.ignore(cin.rdbuf()->in_avail()); 
cin.getline(cin,poemend); 
cin.clear(); 

По существу, обертывание вашей линии с кодом игнорирования и cin.clear.

+0

ошибка: нет соответствующей функции для вызова 'std :: basic_istream :: getline (std :: istream &, std :: string &)' | Что это значит? – Hammurabi8

+0

Это означает, что функция getline не перегружена, чтобы обрабатывать переменные типы данных, которые у вас есть в этой функции. У нас с Вифеем скоро будет свидание, поэтому я не смогу сделать много исследований, чтобы вы его работали, но попробуйте эту страницу. Http: //www.cplusplus.com/reference/string/string/getline/ –

+0

Хорошо, что вы получаете сообщение об ошибке сейчас, потому что это означает, что сброс входного буфера устранил вашу первоначальную проблему с полным пропуском getline. Теперь вам просто нужно выяснить, что вам нужно включить в функцию getline(). –

0

У вас все еще есть новая строка, которая является остатком предыдущей неформатированной операции ввода. Вы должны отказаться от него, используя std::ws. Кроме того, всегда проверяйте, если ваш вход удалось:

if (std::getline(std::cin >> std::ws, poemend)) 
//    ^^^^^^^^^^^^^^^^^^^ 
Смежные вопросы