【问题标题】:C++ getline gets skipped after first callC++ getline 在第一次调用后被跳过
【发布时间】:2017-09-27 12:09:07
【问题描述】:
char input_Handler(int& error,int user,const char satir[]){
    string cheyeni;
    int error_string = 0;
    char che;
    char test;

    cout << "Please enter your move with keyboard letters such as 'A' or 'a'\n";
    //cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    //cin.ignore();
    //
    cin.ignore();
    getline(cin,cheyeni);
........rest is not here

我有这个函数来处理我的游戏的输入。这个函数在游戏中被多次调用。在第一次调用中,它正确处理输入。但是当再次调用它时,它的行为很愚蠢。从我在网上的搜索中,人们总是说当我按下 Enter 时 getline 没有分配换行符,所以当再次调用它时,它不会从我那里得到输入,而是会得到 '\n' 到我的字符串(cheyen)自动。

我似乎无法解决这个问题,我尝试了多种方法 cin.sync(),cin.ignore() 。虽然您可能认为我确实错误地使用了它,但我在 getline 之后的 getline 等之前尝试了很多方法。但我仍然可能/可能在某些事情上错了。我似乎不太明白我缺少的部分在哪里。

用户希望输入一些字符串或字母。

【问题讨论】:

  • 澄清一下,当我调试我的程序时,在第二次调用函数时,它希望你得到输入,但不是在调用 getline() 时,就在它被调用/应该被调用之前。然后在我分配输入后,它继续流式传输,但它没有将我的 cin 输入分配给字符串。
  • 你显然在输入缓冲区中有一个剩余的换行符,调用ignore 应该删除它。如果它似乎不起作用,那么也许您在输入缓冲区中有 multiple 换行符?您能否尝试创建一个Minimal, Complete, and Verifiable Example 供我们查看,并向我们显示您为程序提供的输入?
  • @DragonRock 出现分段错误。
  • 我的游戏从终端获取输入。它要么可以得到类似“LOAD FILE.TXT”的东西,要么可以保存版本来做这些事情。或输入“A”,“B”。因为我必须认为用户可以输入带有空格的内容,所以我不得不使用 getline。我不知道有什么其他选择可以让您获得全线。

标签: c++ io


【解决方案1】:

将您的cin.ignore() 放在getline() 下方

getline(cin,cheyeni);
cin.ignore();

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多