这个网站上有几个问题提到 getline
不工作,明显的解决方案是缓冲区中有剩余的换行符需要清除,据说用 cin.ignore ()
。我已经尝试了很多变体,但似乎没有任何效果,我想做的只是简单的控制台输入,cin >> string
不是一个选项,因为字符串可能有空格。
这是我的代码。
void prompt(std::string * str)
{
cout << "> ";
cin.sync();
cin.get();
cin.ignore(256, '\r');
cin.ignore(256, '\n');
cin.ignore();
cin.ignore();
std::string tmp;
getline(cin, tmp);
cin.sync();
cin.get();
cin.ignore(256, '\r');
cin.ignore(256, '\n');
*str = tmp;
}
如您所见,我已经尝试了各种方法。它仍然直接跳过 getline(cin,tmp)
并且似乎将 str
设置为空字符串。请帮忙。感谢您的宝贵时间。
最佳答案
一旦任何格式化提取失败,将在您的流上设置 failbit,以后的操作将什么都不做。这有点方便,因为您可以分组处理错误,而不是在每个操作之后检查。但是一旦检测到错误,就需要重置故障位以尝试不同的方法。执行此操作的命令非常简单:
cin.reset();
关于c++ - getline(cin, string) 即使使用 cin.ignore() 也不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26185641/