C程序问题,switch结构

switch结构,明明输入的是‘)’,结果硬是case到了‘#’

img

char precede(char a,char b)
{
    char f;
    switch(b)
    {
        case '+':
        case '-':if(a == '(' || a == '#')
                        f = '<';
                    else
                        f = '>';
                    break;
        case '*':
        case '/':if(a == ')'|| a == '*' || a == '/')
                        f = '>';
                    else
                        f = '<';
                break;
        case '(':if(a == ')')
                    {
                        cout << "括号不符合规则!" << endl;
                        exit(-1);
                    }
                    else
                        f = '<';
                    break;
        case ')':switch(a)
                    {
                        case '(':f = '=';
                                break;
                        case '#':
                            {
                                cout << "缺失左括号" << endl;
                                exit(-1);
                            }
                        default:f = '>';
                    }
                    //break;
        case '#':switch(a)
        {
            case '(':
                cout<< "x == " << a;
                cout << "c ==  " << b;
                cout << "缺失右括号" << endl;
                exit(-1);
            case '#':f = '=';
                    break;
            default: f = '>';
        }

    }
    return f;
}

因为没有break,所以也走到了#

每一个case都这样写 case:{代码块}这样写的错误是避免程序无故出现bug,每一个case都要带break