注册 登录
编程论坛 C++教室

关于函数辨别的问题

wxswuwuwu 发布于 2011-05-18 10:25, 630 次点击
#include<iostream.h>
int chenji(int,int);
double chenji(double,double);
void main()
{
    int a,b,chenjic;
    cout<<"请输入a,b=";
    cin>>a>>b;
    chenjic=chenji(a,b);
    cout<<"a,b的乘积为"<<chenjic<<endl;
   
    double i,j,chenjid;
    cout<<"请输入i,j=";
    cin>>i>>j;
    chenjid=chenji(i,j);
    cout<<"i,j的乘积为"<<chenjid<<endl;
}
   
    int chenji(int x,int y)
    {
        int m;
        m=x*y;
        return m;
    }
   
    double chenji(double x,double y)
    {
        double m;
        m=x*y;
        return m;
    }
这个是一个求乘积的函数,但是只能分两次输入,第一次是整数,第二次是双精度,如果开始输入小树的话就会出现错误,我想把它修改成能够自动辨别整数和小数然后进行运算,但是想来想去貌似没有什么可行的方法,只能分两次输入,真的就这么悲剧么,还是干脆弃掉int只用double呢?
或者我在cin后加个if语句来辨别小数和整数可行么,但是加个if语句来辨别的话我又该如何来确定小数和整数呢……
残念……
11 回复
#2
hellovfp2011-05-18 11:05
残念=悖论
用double为准。
#3
Toomj2011-05-18 12:47
用函数重载呀,编译器会根据实参和形参的类型及个数的最佳匹配,自动决定调用哪一个函数。
#4
wxswuwuwu2011-05-18 13:03
不是啊,我执行后直接输入小数,他默认的是第一个,结果就是错误结果了啊,数据溢出了啊
不能识别啊,郁闷了啊
#5
linw12252011-05-18 14:19
用模版,随你怎么输入。
#6
lixinsbgtf2011-05-18 14:35
你的问题在于你分两次输入, 第一次的输入你定义的是整形,但是你却非得输入小数,这中情况肯定内存溢出。
就像你定义了16位长度的整型,你非得输入个32位长度的浮点型。不溢出才怪。
对于这种情况,最好就用浮点定义,输入的时候不管输入是整数还是小数,统统接受~!!
#7
张瑞涛2011-05-18 15:15
建议你看一下"模板类"和"函数重载"这个两个知识点,其实,上面的程序你已经用到函数重载了
#8
wxswuwuwu2011-05-18 17:56
我知道用double就能解决啊,但是我想做成一个系统能够自动辨别整数和小数的啊
上面用的却是是函数重载啊,老实说我对函数重载理解的还不深,只知道能够调用里面的函数而已……
我用模板来试试再说吧……
#9
wxswuwuwu2011-05-18 18:08
我这回写的应该是模板了吧,怎么还是不行啊
#include<iostream.h>
template<class T>
T chenji(T x,T y)
{
    T t;
        t=x*y;
    return t;
}
void main()
{
    int a,b,chenjic;
    cout<<"请输入a,b="<<endl;
    cin>>a>>b;
    chenjic=chenji(a,b);
    cout<<"a,b的乘积为"<<chenjic<<endl;
   
    double i,j,chenjid;
    cout<<"请输入i,j="<<endl;
    cin>>i>>j;
    chenjid=chenji(i,j);
    cout<<"i,j的乘积为"<<chenjid<<endl;
}
这回写的倒是有点模样了,直接输入小数可以运算两边,第一遍溢出,但是第二遍的结果也不对啊
如果还是先输入整数再输入小数就不会有问题,哪位高手帮忙修改下啊,是在无能为力了……
#10
wxswuwuwu2011-05-19 18:17
好吧,我被无视了,结贴吧
#11
棉雨2011-05-19 23:49
你第一次定义的数据类型是整形,第二次定义的是double型,所以运行的时候必须是先输入整形的,如果你输入的是小数,那必然会出错,也将会导致第二遍的结果不对。

六楼正解,你该琢磨琢磨他的话。
#12
wavewind2011-05-20 06:15
#include<iostream.h>
template<typename T>
T chenji(T x,T y)
{
     return x*y;
}
void main()
{
   
   
    double i,j,chenjid;
    cout<<"请输入i和j="<<endl; //建议这里的逗号取消掉,因为加上逗号,很容易让人理解为按以下格式输入3.2,5.0
    cin>>i>>j;
    chenjid=chenji(i,j);
    cout<<"i,j的乘积为"<<chenjid<<endl;
}
1