星星博客 »  > 

c++做计算器遇到问题,求大佬指教

//这样做输出总是0, 不知道为什么


#include<bits/stdc++.h>
using namespace std;
int jia(double a,double b)
{
    double t;
    t=a+b;
    return t;
}
int jian(double a,double b)
{
    double t;
    t=a-b;
    return t;
}
int cheng(double a,double b)
{
    double t;
    t=a*b;
    return t;
}
int chu(double a,double b)
{
    double t;
    t=a/b;
    return t;
}
int power(double a,double b)
{
    double t;
    t=pow(a,b);
    return t;
}//待定 
int pan(char s3)
{
    int ans;
    if(s3=='+') ans=1;
    if(s3=='-') ans=2;
    if(s3=='*') ans=3;
    if(s3=='/') ans=4;
    return ans;
}
int diaoyong(int flag2,double f1,double f2)
{
    int ans;
    if(flag2==1) ans=jia(f1,f2);
    if(flag2==2) ans=jian(f1,f2);
    if(flag2==3) ans=cheng(f1,f2);
    if(flag2==4) ans=chu(f1,f2);
    if(flag2==5) ans=power(f1,f2);
    return ans; 
}

int main()
{
    char s3;
    char z1[10],z2[10];
    string s,s1,s2;//s为总输入 s1为第一组数 s2为第二组数 s3为运算符号 
    cin>>s;
    string sx=s;
    int flag=0;//判断上一位是否是数字,0代表是数字
    int flag1=0;//判断是第一组数还是第二组数 
    int flag2;//表示运算符号 
    int ans=0;//ans 代表了for循环内数字位数 
    int ans1=1;//ans1 代表了该组数字起始位置 
    double f1,f2;//表示第一组数与第二组数 
    for(int i=1;i<=s.length();i++)
    {
        if(flag==0&&s[i]<='9'&&s[i]>='0'||ans1==1||s[i]=='.')
        {
            ans++;
            if(flag1==0)
            {
                s1=s.substr(ans1,ans);
            }
            else
            {
                s2=s.substr(ans1,ans);
            }
        }
        else if(s[i]<='9'&&s[i]>='0')
        {
            ans1=i;
            ans++;
            if(flag1==0)
            {
                s1=s.substr(ans1,ans);
            }
            else
            {
                s2=s.substr(ans1,ans);
            }
        }
        else
        {
            ans=0;
            flag=1;
            s3=s[i];
            flag2=pan(s3);
            f1=0;
            f2=0;
            if(flag1==1)
            {
                //f1=atof(s1);
                //f2=atof(s2);
                s1.copy(z1,s1.length(),0);
                s2.copy(z2,s2.length(),0);
                for(int i=0;i<s1.length();i++)
                {
                    f1=f1*10+int(z1[i])-'0';
                }
                for(int i=0;i<s2.length();i++)
                {
                    f2=f2*10+int(z2[i])-'0';
                }
                f1=diaoyong(flag2,f1,f2);
            }
        }
    }
    //f1=atof(s1);
    //f2=atof(s2);
    s1.copy(z1,s1.length(),0);
    s2.copy(z2,s2.length(),0);
    for(int i=0;i<s1.length();i++)
    {
        f1=f1*10+int(z1[i])-'0';
    }
    for(int i=0;i<s2.length();i++)
    {
        f2=f2*10+int(z2[i])-'0';
    }
    f1=diaoyong(flag2,f1,f2);
    printf("%d",f1);
    return 0;
}

相关文章