gpt4 book ai didi

C++:帮助解决 Linux 和 Windows 之间的 cin 差异

转载 作者:IT王子 更新时间:2023-10-29 01:25:12 27 4
gpt4 key购买 nike

我有一个我编写的 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)中运行?

预先感谢您的帮助!

最佳答案

我认为 cin.ignorecin 上设置了失败标志,这使得它永远停留在最上面的 if 语句中。 INT_MAX 是一个非常大的数字 - 您确定在所有平台上都允许 cin.ignore 吗?

关于C++:帮助解决 Linux 和 Windows 之间的 cin 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2753774/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com