顺序栈判断括号是否匹配


int matchStack(seqStack& S) {
    cout << "输入表达式:";
    char a[100];
    gets_s(a);
    char* p = a;
    element x;
    char e;
    while (*p != '\0') {
        switch (*p) {
        case'(':
        case'{':
        case'[':
            pushStack(S, *p);
            p++;
            break;
        case')':
        case'}':
        case']':
            if (stackEmpty(S)) {
                cout << "缺少左括号!" << endl;
                return 0;
            }
            else {
                stackTop(S, e);//栈顶元素
                if (isSame(e, *p))
                    popStack(S, x);
                else {
                    cout << "括号不匹配";
                    return 0;
                }
            }
        default:
            p++;
        }
    }
    if (stackEmpty(S) && *p == '\0')
        cout << "匹配成功!" << endl;
    else
        cout << "匹配不成功" << endl;

}
------------------------------------

int main() {
    seqStack S;
    initialStack(S);
    element x;
    int choice = 0;
    do {
        cout << "**********顺序栈实验测试程序*********************************" << endl;
        cout << "*0-退出                                                      " << endl;
        cout << "*1-利用顺序栈实现将10进制数转换为x进制数                      " << endl;
        cout << "*2-判断其中的各括号是否是匹配的                               " << endl;
        cout << "*3-求出所有可能的出栈序列                                      " << endl;
         cout << "请输入0~3选择你要进行的操作:                                  " << endl;
        cin >> choice;
        switch (choice) {
        case 0: {
            cout << "你选择退出";
            break;
        }
        case 1: {
            switchStack(S);
            break;
        }
        case 2:
            matchStack(S);
              break;

写了一个小菜单,为啥情况2单独写的时候可以运行,写在菜单里的时候,输入2按回车直接就输出匹配成功?,也就是matchStack函数

  cout << "输入表达式:";
    char a[100];
    gets_s(a);
    char* p = a;
    element x;
    char e;
    while (*p != '\0') {
        switch (*p) {
        case'(':
        case'{':
        case'[':
            pushStack(S, *p);
            p++;
            break;
        case')':
        case'}':
        case']':
            if (stackEmpty(S)) {
                cout << "缺少左括号!" << endl;
                return 0;
            }
            else {
                stackTop(S, e);//栈顶元素
                if (isSame(e, *p))
                    popStack(S, x);
                else {
                    cout << "括号不匹配";
                    return 0;
                }
            }
        default:
            p++;
        }
    }


这一段都没运行?!

cin >> choice; cin.clear();cin.sync();

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^