我有一个我写的Win32控制台程序,它工作正常。该程序从用户处获得输入并执行一些计算并显示输出 - 标准内容。为了好玩,我试图让程序在我的Fedora盒子上工作,但是当用户输入与我的变量类型不匹配的东西时,我遇到了清除cin的问题。这是有问题的代码:C++:Linux和Windows之间的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 :: max()'可能是更好的选择。 –
2010-05-02 14:50:30