括号不平衡

时间:2016-09-29 18:12:23

标签: c

为什么它不打印" Paranthesis是平衡的"。每当我通过平衡括号时它会崩溃,例如"(2 + 4)"每当我通过不平衡括号时都能完美地工作,例如"((3 + 4("。这里是我的代码。

struct stackADT {
    int count;
    char data[50];
} s;


bool Is_Equal(char b, char c){
    if(b == '(' && c == ')')
            return true;

    if(b == '{' && c == '}')
            return true;


    if(b == '[' && c == ']')
            return true;

    else{
            return false;

  }
}


bool pop(struct stackADT *s, int *num) {
    if (Is_Empty())
        return false;
    else {
        *num = s->data[(s->count) -1];
        (s->count)--;
        return true;
    }
}

int main(void) {
    char expression[100];
    int i, len;
    initialize();
    printf("Enter an expression: ");
    scanf("%s", &expression);
    len = strlen(expression);


    for(i = 0; i < len; i++){
        if(expression[i] == '(' || expression[i] == '{' || expression[i] == '['){
            push(expression[i]);
        }
            if(expression[i] == ')' || expression[i] == '}' || expression[i] == ']'){

                pop(&s,expression[i]);
        }
    }

    if(Is_Equal(pop(&s, expression[i]), expression[i]))
        printf("Parenthesis are balanced\n");
    else{
        printf("Parenthesis are unbalanced\n");
    }
    return 0;
    getch();
}

2 个答案:

答案 0 :(得分:1)

在:

i

len大于expression compile 'com.facebook.android:facebook-android-sdk:4.+' 的大小)。并且你的编译器应该抱怨,因为你是一个char,一个指向int的指针是预期的。

所以,先打开警告。

答案 1 :(得分:1)

函数Is_Equal具有proto类型:

bool Is_Equal(char b, char c)
              ^^^^^^
              Expects a char

函数pop具有proto类型:

bool pop(struct stackADT *s, int *num)
^^^^
Returns a bool

所以这一行有一个普遍的问题:

    if(Is_Equal(pop(&s, expression[i]), expression[i]))
                ^^^^^^^^^^^^^^^^^^^^^^
                bool but char was expected!

关于pop函数也可以这么说。它期望int*作为第二个参数,但您传递char。例如:

pop(&s,expression[i]);