我刚开始学习C++,需要一些帮助。
基本上,我的代码是按照我想要的方式工作的。然而,正如你在下面看到的,当我键入一个数字和一个字母时,代码仍然只把变量当作一个数字。
我想看到同样的错误信息,当有人键入一个字母,然后一个数字相同的方式为这一点。我知道这与我的函数,但当我尝试做isNaN(Not-a-Number)
同样的问题发生。我做错了什么?
我已经包含了我的函数验证代码,问题是:
#include "functions.h"
#include <iostream>
using namespace std;
double getNumber(){
double temperature = 0;
while (cout << "Please enter a temperature between -40 and 40 degrees Celsius: " && !(cin>>temperature))
{
cin.clear();
cin.ignore(1000, '\n');
cin.fail();
cout << "Bad value, try again..." << endl;
cout <<"\n";
}
return temperature;
}
double validRange(double min, double max){
double temperature = 0;
while(true){
temperature = getNumber();
if(temperature >= min && temperature <= max)
break;
else
{
cout << "Out of range, value must be between " << min << " and " << max << endl;
}
}
return temperature;
}
2条答案
按热度按时间mznpcxlj1#
要检查输入的有效性,我建议使用斯托德()和异常处理。因为
cin
接受尽可能多的可以解释为数字的表达式,并且如果发生这种情况,则返回非零值。但是,stod()
可以检查解析的字符数,如果检查是否解析了整个表达式,如果没有,则throw
,我们可以执行有效性检查。下面是修改后的getnumber():y4ekin9u2#
用户输入总是一件痛苦的事。你应该:
我保留了一个小函数来实现这个目的:
它可以用作:
如果你打算经常使用它,你甚至可以把普通代码(比如要求一个特定范围内的数值) Package 成一个小函数:
这看起来像是大量的输入,但关键是所有的输入都集中在一个地方,它可以一遍又一遍地重复使用,* 而且 * 它工作正常,期望用户为一个提示提供一个输入,并在无效输入时正确地失败。