明天我必须为我的课写一个带有三个参数的通用函数“InputNumber”。该功能应该能够将数字可靠地输入到程序中,并全面检测输入错误(包括在数字后输入额外字符的情况,例如条目“123xy”)。第一个和第二个参数是“字符串”类型。在这样做时,第一个参数表示打印给用户的文本作为应输入数字的通知(提示),而第二个参数是打印给用户作为警告的文本,以防输入是不正确。第三个参数是对任意数字类型的引用,表示将放置输入数字的变量。 下面的函数是我写的。它在一些明显的情况下有效,但是当我写,例如,我的十进制数字后面的字母时,该数字不知何故通过了(2.rt)。另外,当我写一些不应该通过的东西时(比如 2.rt 代表我的真实(双)数),它不会自动打印下一个输入(“输入指数”)而是“输入指数:输入错误,请再试一次... 输入指数:“。如何修复我的函数,以便只有实数作为基数传递,而只有整数作为指数传递?
#include <iostream>
#include<string>
#include <cmath>
template<typename SomeType>
SomeType InputNumber(std::string input,std::string error,SomeType &n)
{
for(;;)
{
std::cout<<input;
std::cin>>n;
if(std::cin.fail())
{
std::cin.clear();
std::cin.ignore(1000000,'\n');
std::cout<<error;
}
else
{
break;
}
}
return n;
}
int main ()
{
double x=InputNumber("Enter base: ","Input error, please try again...\n",x);
int n=InputNumber("Enter exponent: ","Input error, please try again...\n",n);
double r=pow(x,n);
std::cout<<x<<" to "<<n<<" results in "<<r<<std::endl;
return 0;
}