【发布时间】: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。我不知道有什么其他选择可以让您获得全线。