【问题标题】:Temp Convert input bulletproofing?Temp Convert 输入防弹?
【发布时间】:2014-10-08 15:04:49
【问题描述】:

我正在尝试编写具有下限和上限(以摄氏度为单位)和增量的代码,并吐出一个显示转换为华氏温度的表格。无论如何,我遇到的问题是输入的防弹。

这是我的代码

int main() {

double lowerLimit=0;
double higherLimit=0;
double step=0;

cout<<"Please give in a lower limit, limit >= 0: 10\n\n";
cin>>lowerLimit;
while(!(cin >> lowerLimit) || lowerLimit < 0 || lowerLimit > 500)
{
    cout << "invalid input!\n";
    cin.clear();
    cin.ignore( numeric_limits<int>::max(), '\n' );
}

cout<<"Please give in a higher limit, 10 > limit <= 500: 20 \n\n";
cin>>higherLimit;
while(!(cin >> higherLimit) || higherLimit <= 10 || higherLimit > 500)
{
    cout << "invalid input!\n";
    cin.clear();
    cin.ignore( numeric_limits<int>::max(), '\n' );
}
cout<<"Please give in a step. 0 < step <= 10: 4\n\n";
cin>>step;
while(!(cin >> step) || step <= 0 || step >10)
{
    cout << "invalid input!\n";
    cin.clear();
    cin.ignore( numeric_limits<int>::max(), '\n' );
}

cout<<lowerLimit<<higherLimit<<step<<"\n\n";
cout<<"Thanks!";



return 1;
}

输出看起来像

发生的情况是它要求我输入下限,当我输入某些内容时它不会做任何事情,它只会停留在那里,只有当我再次写入时它才会继续。 因此,当我输入 8 时它什么也没做,然后我输入 0 它继续。与higherLimit相同,我输入10没有任何反应,然后我输入100并继续。

无法弄清楚该怎么做。我尝试了不同的循环,但 if 语句不起作用。

最后一点。不,这不是硬件。

我不需要你告诉我我不应该这样写我只需要了解发生了什么问题。

如果有什么你认为我应该告诉你们的,请发表评论,我会编辑,请不要只给 -1 就离开。

【问题讨论】:

  • 在 while 循环之前总是有一个 cin 操作,因此它为什么第一次“什么都不做”。它在变量中读取它,然后在 while 条件内点击第二个 cin &gt;&gt; var 语句。删除循环条件之外的那些。

标签: c++ validation input


【解决方案1】:

删除每个 while 之前的 cin 。你现在做的是一次输入,因为while中的条件也有cin,所以需要重新输入。因此输入两次

【讨论】:

  • 哦,谢谢你的权利对不起我没有意识到非常感谢你
猜你喜欢
  • 1970-01-01
  • 2022-08-04
  • 2011-09-06
  • 2017-09-06
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
相关资源
最近更新 更多