C++ 检查数字和该数字的指数的通用函数

问题描述 投票:0回答:0

明天我必须为我的课写一个带有三个参数的通用函数“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;
}
c++ templates typechecking
© www.soinside.com 2019 - 2024. All rights reserved.