关于栈的有关问题。求帮忙

关于栈的问题。。。求帮忙
为什么在英文状态下,当我输入  (   时就不可以,输入 {  和  [  时就可以判断,( 不是ASCLL码相差1吗?我写的有错吗?

StackNode *Push(StackNode *top,char string[MAXSIZE]){
    StackNode *p,*q;
    int i;
    char item,s;
    for(i=0;i<MAXSIZE;i++)
    {
        s=string[i];
        if((s=='{')||(s=='(')||(s=='['))                                       //遇到这三个就进栈。
            {
                item=s;
                p=(StackNode *)malloc(sizeof(StackNode));
                p->next=NULL;
                p->data=item;
                p->next=top;
                top=p;
            }
        if((s=='}')||(s==')')||(s==']'))
            {
                if((int)s==(int)top->data+1||(int)s==(int)top->data+2)           //如果相等栈顶出栈并指向下一个。
                {
                    q=(StackNode *)malloc(sizeof(StackNode));
                    q->next=NULL;
                    q=top->data;
                    top=top->next;
                    free(q);
                }
                else
                    return top;
            }
    }
    return top;
};

int main(){
  StackNode *top;
  int i,k;
  char string[MAXSIZE];
  top=InitStack(top);
  CreatStack(top);
  printf("请输入带{ ( [的%d个字符的字符串:",MAXSIZE);
  for(i=0;i<MAXSIZE;i++)
    scanf("%c",&string[i]);
  getchar();
  top=Push(top,string);
  if(top==NULL)
    {
        for(i=0;i<MAXSIZE;i++)
           printf("%c",string[i]);
        printf("符号平衡.\n");
    }
  else
    {
        for(i=0;i<MAXSIZE;i++)
           printf("%c",string[i]);
        printf("符号不平衡.\n");
    }
  return 0;
}
------解决方案--------------------
全角/半角状态?