读书人

用C++写了一个简易四则运算计算器大

发布时间: 2012-07-31 12:33:46 作者: rapoo

用C++写了一个简易四则运算计算器,大部分写好了,但是还是有点小BUG,希望指导一下。

C/C++ code
#include<iostream>using namespace std;//数组模拟堆栈struct stack{    double a[200];    double top;}Stack;//初始化一个空栈void IniteStack(){    Stack.top=0;}//堆栈的弹出方法double Pop(){    if(Stack.top==0)        return 0;    else         return Stack.a[(int)--Stack.top];}//将元素压入栈的方法void Push(double m){    Stack.a[(int)Stack.top]=m;    Stack.top++;}//主函数double main(){    //建立一个足够长的数组(可以存放200个元素)    char str[200],*p,*q;    char flag;    double m,sum,n,k;    IniteStack();    cout<<"请输入中缀表达式:";    while(cin>>str&&str[0]!='0')    {        p=q=str;        sum=0.0;        //通过p指针指向char型数组元素,并通过算法把数组中的元素转换成原本要输入的数字进行处理        while(*p)        {             m=0.0;            while(1)            {                if((*p>='0' && *p<='9') || *p=='.')                 {                    if(*p>='0' && *p<='9')                    {                        while(*p>='0' && *p<='9')                        {                            m=m*10+(double)*p-'0';                            p++;                        }                    }                    if(*p=='.')                     {                        double y=0.1;                        p++;                        while(*p>='0' && *p<='9')                        {                            m= m + y*(double)(*p-'0');                            y= y/10;                            p++;                        }                        p--;                    }                }                else                     flag = 'a';break;            }             //计算器核心算法,通过对运算符的判断和堆栈操作来实现运算            switch(*q)            {            case '+':                Push(m);break;            case '-':                Push(-m);break;            case '*':                k=Pop();                Push(k*m);break;            case '/':                if(m == 0)                {                    cout<<"除数不能为0!"<<endl;                    return 0;                }                else                {                    k=Pop();                    Push(k/m);break;                }            default:                if(q==str) Push(m);                break;            }            q=p;            p++;        }        while(n=Pop())        {                sum+=n;        }        if(flag == 'a')            cout<<"非法的表达式!"<<endl;        else            cout<<"求值结果为:"<<sum<<endl; break;         }    return 0;}


如果是计算类似10+1.123的话可以得到正确结果,但是计算1.123+10的话就出错了(我试了一下,只要第一个数带有小数点就不行…),请帮我看一下错误出在哪了…谢谢~

[解决办法]
加断点,单步调试
[解决办法]
自行对比.
建议.
1.LS所言.
2.测试调试, 思考, 测试调试, 思考 ...... finish

C/C++ code
           m=0.0;            while(1)            {                if((*p>='0' && *p<='9') || *p=='.')                 {                    if(*p>='0' && *p<='9')                    {                        while(*p>='0' && *p<='9')                        {                            m=m*10+(double)*p-'0';                            p++;                        }                    }                    if(*p=='.')                     {                        double y=0.1;                        p++;                        while(*p>='0' && *p<='9')                        {                            m= m + y*(double)(*p-'0');                            y= y/10;                            p++;                        }                        //p--;                    }                }                else                     flag = 'a';break;            }             cout << "m=" << m <<endl; cout << "p=" << p << endl;            //计算器核心算法,通过对运算符的判断和堆栈操作来实现运算            switch(*q)            {            case '+':                Push(m);break;            case '-':                Push(-m);break;            case '*':                k=Pop();                Push(k*m);break;            case '/':                if(m == 0)                {                    cout<<"除数不能为0!"<<endl;                    return 0;                }                else                {                    k=Pop();                    Push(k/m);break;                }                           default:                if(q==str) Push(m);                break;            }            //finish.            if(*p == '\0' || *p == '\n')                break; 

读书人网 >C++

热点推荐