c语言用栈判断有效括号

bool ValidBrackets(char* str){
Stack stack;
CreateStack(&stack, 50);
char *p;
p=str;
int i=0;
while(p[i]!='s'){
scanf("%c\n",p);
if(p[i]=='('||p[i]=='['){
Push(&stack,p[i]);

                    }
                 if(p[i]==')'){
                 
                    if(IsEmpty(&stack))
                        return false;
                else{
                        if(stack.values[stack.top]=='(')
                    
                        Pop(&stack,&stack.values[stack.top]);
                            
                        else return false;
        }
            
        

                 if(p[i]==']'){

                        if(IsEmpty(&stack))
                            return false;
                        else if(stack.values[stack.top]=='['){
                             Pop(&stack,&stack.values[stack.top]);
                                }
                        
                        else return false;
        }
    i++;
    printf("%d",i);
    }
    if(IsEmpty(&stack))
        return true;
    else 
        return false;

}

没有error,但是结果不对。请问一下要怎么改?

代码发全一些,Stack定义、CreateStack函数定义、Push、Pop啥的都没发