F - 简单计算器

        简单计算器这个题一开始我自己写了一个切割函数,把字符和数字切割开来,之后再判断进行计算,但是,很不幸,总是Wrong Answer,说好的简单计算器呢,简单在哪里呢?后来在网上看了别人的思路,为什么不在入栈时就进行计算呢,嗯,没错,好主意,说干就干,然后,发现真的很简单,但是,我那个也没错啊,汗~


Description

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 
 

Input

测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。 
 

Output

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。 
 

Sample Input

1 + 2
4 + 2 * 5 - 7 / 11
0
 

Sample Output

3.00
13.36



下面贴出我的代码并附带一些解释:


#include<iostream>
#include<cstdio>
#include<stack>
#include <iomanip>
using namespace std;
stack<double> mystack;
int main()
{
    double a, b, sum;
    char c;
    //接收第一个字符串
    while(cin>>a)
    {
        sum = 0;
        while(!mystack.empty())mystack.pop();   //清空栈
        c = getchar();  //接收空格或者行末字符
        if(a==0 && c=='\\n')break;
        mystack.push(a);    //a入栈
        c = getchar();      //接收运算符
        while(cin>>b)
        {
            //基本运算
            switch(c)
            {
            case '*'://*号计算
                a = mystack.top();
                mystack.pop();
                mystack.push(a*b);
                break;
            case '/'://“/”号计算
                a = mystack.top();
                mystack.pop();
                mystack.push(a/b);
                break;
            case '+'://+号计算
                mystack.push(b);
                break;
            case '-'://-号计算
                mystack.push(-b);
                break;
            }
            c = getchar();  //接收空格或者文件尾
            if(c == '\\n')break;
            c = getchar();  //接收运算符
            getchar();      //接收空格
        }
        //求和
        while(!mystack.empty())
        {
            sum+=mystack.top();
            mystack.pop();
        }
        cout<<fixed<<setprecision(2)<<sum<<endl;
    }
    return 0;
}