干扰getline功能的东西?

时间:2014-01-25 03:09:02

标签: c++ string getline

我是代码和本网站的新手,所以如果我忽视了一些明显的东西,请原谅我。我一直在尝试用c ++编写一个简短的小游戏,我需要接受用户输入。我想接受多个单词,所以我的书推荐的cin>>命令就出来了。我通过研究发现的最好的事情是getline(cin,var);命令。我可以轻松地在小规模测试中使用它,但是当我将它实现到我的500系列游戏中时,它永远不会起作用。它将跳过该位代码而不等待用户输入,并将变量设置为空白。我不会明显地包括整个代码,但这里有问题,我的标题。

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

同样,如果我把它带到一个新的空白页面,这是完美的,所以我真的不确定是什么阻碍了。我很乐意回答有关代码的任何问题,并在需要时发布更多有用的内容。非常感谢您花时间阅读本文!

2 个答案:

答案 0 :(得分:0)

有时刷新输入缓冲区很神奇。这可能是您的情况中的情况,也可能不是,但请尝试使用此代码。

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

基本上用忽略代码和cin.clear包装你的getline。

答案 1 :(得分:0)

您仍然有换行符,这是以前未格式化的输入操作的残留。您必须使用std::ws将其丢弃。此外,请始终检查您的输入是否成功:

if (std::getline(std::cin >> std::ws, poemend))
//               ^^^^^^^^^^^^^^^^^^^