【问题标题】:Something interfering with the getline function?干扰 getline 功能的东西?
【发布时间】:2014-01-25 03:09:01
【问题描述】:

我是新来的代码和这个网站,所以如果我忽略了一些明显的东西,请原谅我。我一直在尝试用 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;
}

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

【问题讨论】:

  • 请使用一点缩进
  • 您没有向我们展示的代码是问题所在。
  • 您在这里向我们展示的代码没有问题。你能发布更多与流有关的代码吗?
  • 如果您在getline 之前的任何时候使用cin,则行尾仍将等待读入,getline 将很乐意接受它而无需等待更多输入。
  • @MarkRansom 不确定我是否理解您的意思 - std::getline 不采用或提取新行(默认情况下)。它使用它作为输入的分隔符。因此,如果换行符仍然留在流的开头,std::getline 将变为不可操作,直到它被丢弃。

标签: c++ string getline


【解决方案1】:

有时刷新输入缓冲区很神奇。在您的场景中可能会或可能不会出现这种情况,但请尝试此代码。

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

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

【讨论】:

  • 错误:没有匹配函数调用'std::basic_istream::getline(std::istream&, std::string&)'|这是什么意思?
  • 这意味着getline函数没有被重载来处理你当前在函数中拥有的可变数据类型。妻子和我很快就会有约会之夜,所以我不能为你做大量的研究来让它发挥作用,但试试这个页面。 cplusplus.com/reference/string/string/getline
  • 现在遇到错误很好,因为这意味着刷新输入缓冲区已经解决了 getline 被完全跳过的初始问题。现在你只需要弄清楚你需要在 getline() 函数中添加什么。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多