四则运算 递归问题 调试和输出结果不一致

四则运算
调试发现递归有问题
sum调试的时候结果是对的
输出的时候却是错的
上代码


#include<iostream>
#include<stack>
using namespace std;
int result(const char *data)
{//pos定位遍历 分别读取数据 stack存
    //递归括号
    //读到数据 存num 根据上一个op操作
    //取下一个op
    int cache=0;
    char op = '+';
    stack<int> stk;
    while(*data!='\0')
    {
        if(*data == '('|| *data == '['||*data == '{')
        {
            data++;
            cache = result(data);
        }
        while(isdigit(*data))
        {
            cache =cache*10+ (*data - '0');
            data ++;
        }
        switch(op)
        {
            case '+':
                {
                    stk.push(cache);
                    break;
                }
            case '-':
                {
                    stk.push(-cache);
                    break;
                }
            case '*':
                {
                    stk.top() *= cache;
                    break;
                }
            case '/':
                {
                    stk.top() /= cache;
                    break;
                }
        }
        cache = 0;
        op = *data;
        if(*data == ')'|| *data == ']'||*data == '}')
        {
            ++data;
            break;
        }
        ++data;
    }
    int sum = 0;
    while(!stk.empty())
    {
        sum += stk.top();
        stk.pop();
    }
    return sum;//(8-1) 调试结果是7 但是输出是6 为什么??!!
}
int main()
{
    string str;
    cin>>str;
    cout<<result(str.c_str());
    return 0;
}