本网站上有几个问题涉及getline
无法正常工作,显而易见的解决方案是缓冲区中还有需要清除的换行符,据推测与cin.ignore()
。我已经尝试过这么多的变化,没有什么似乎工作,所有我想要做的只是简单的控制台输入和cin >> string
不是一个选项,因为字符串可能有空格。getline(cin,string)不工作即使有cin.ignore()
这是我的代码。
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标签问题 – 2014-10-03 19:49:48
尝试删除所有'忽略()'命令,并使用'的std ::函数getline(给std :: cin> > std :: ws,tmp);'而是。 '>> std :: ws'跳过所有空格(包括行尾)。 – Galik 2014-10-03 19:50:30
我没有看到任何错误检查。做'if(!cin){cout <<“某事设置了失败位。” << endl; }' – 2014-10-03 20:34:24