我有一个Win32控制台程序,它运行良好。程序从用户那里获取输入并执行一些计算,然后显示输出 - 标准的东西。出于兴趣,我正在尝试让程序在我的Fedora机器上运行,但是当用户输入与我的变量类型不匹配时,我遇到了清除cin的问题。以下是相关代码:
void CParameter::setPrincipal() {
double principal = 0.0;
cout << endl << "Please enter the loan principal: ";
cin >> principal;
while(principal <= 0)
{
if (cin.fail())
{
cin.clear();
cin.ignore(INT_MAX, '\n');
}
else
{
cout << endl << "Plese enter a number greater than zero. Please try again." << endl;
cin >> principal;
}
}
m_Parameter = principal;
这段代码在Windows中可以正常运行。例如,如果用户尝试输入char数据类型(而不是double),则程序会提示用户出现错误,重置cin,并允许用户重新输入有效值。
当我将此代码移动到Fedora时,它可以编译通过。但是当我运行程序并输入无效的数据类型时,while循环永远不会停止以允许用户更改输入。
我的问题是:在Fedora环境中输入无效数据时,如何清除cin?此外,我应该如何编写此代码,以便在两个环境(Windows和Linux)中都能正常运行?
非常感谢您的帮助!
std::numeric_limits<std::streamsize>::max()
可能是更好的选择。 - Johannes Schaub - litb