【发布时间】:2014-11-28 21:46:17
【问题描述】:
这个站点上有几个问题是指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 设置为一个空字符串。请帮忙。感谢您的宝贵时间。
【问题讨论】:
-
请不要用 C 标签标记 C++ 问题
-
尝试删除所有
ignore()命令并改用std::getline(std::cin >> std::ws, tmp);。>> std::ws跳过所有空格(包括行尾)。 -
我没有看到任何错误检查。做
if (!cin) { cout << "Something set the failbit." << endl; } -
@BenVoigt 我完全忽略了这样做,看来故障位已设置。我该怎么办?
-
@Jake:找出你的代码中的故障位设置了多远,并修复它。如果应该设置它(例如处理格式错误的输入),则使用
cin.clear()重置故障位并尝试另一个操作。
标签: c++ console std iostream getline