有人能看看我哪里写的不对吗?

问题遇到的现象和发生背景

请编写程序检查C语言源程序中下列符号是否配对://、(与)、[与]、{与}。

输入格式:
输入为一个C语言源程序。当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束。程序中需要检查配对的符号不超过100个。

输出格式:
首先,如果所有符号配对正确,则在第一行中输出YES,否则输出NO。然后在第二行中指出第一个不配对的符号:如果缺少左符号,则输出?-右符号;如果缺少右符号,则输出左符号-?。

输入样例1:
void test()
{
int i, A[10];
for (i=0; i<10; i++) { //
A[i] = i;
}
.
输出样例1:
NO
/
-?

感觉没什么问题 但就是结果不对

用代码块功能插入代码,请勿粘贴截图
#include 
#include 
#define Max 100
#define ERROR NULL
#define YES 1
#define NO 0
void Lack_left( char a ) // 缺少左符号时的输出
{
    if (a == '>')
        printf("NO\n?-*/");
    else
        printf("NO\n?-%c", a);
    exit(0);
}

void Lack_right( char a ) // 缺少右符号时的输出
{
    if (a == '<')
        printf("NO\n/*-?");
    else
        printf("NO\n%c-?", a);
    exit(0);
}
typedef char element;
typedef struct LNode
{
    element *data;
    int top;
    int size;
}LNode,*list;
list create(int size)
{
    list S=(list)malloc(sizeof(struct LNode));
    S->data=(list)malloc(sizeof(struct LNode));
    S->top=-1;
    S->size=size;
    return S;
}
int isfull(list S)
{
    if(S->top==S->size-1)
    {
        return YES;}
    return NO;
}
int isempty(list S)
{
    if(S->top==-1)
    {
        return YES;
    }
    return NO;
}
int push(list S,element X)
{
    if(isfull(S))
    {
        return YES;
    }else
    {
        S->data[++S->top]=X;
        return NO;
    }
}
void pop(list S)
{
    if(!isempty(S))
    {
        return ERROR;
    }else
    {
        S->data[S->top]='\0';
        S->top--;
    }
}
int main()
{
    list S=create(100);
    char str[Max];
    char t[Max];
    int l=-1;
    while (scanf("%s", str) != EOF && str[0] != '.') // 先对输入文本进行处理,将所有符号压入到符号栈中
    {
        for (int i = 0; str[i] != '\0'; i++)
        {
            if (str[i] == '(' || str[i] == ')' || str[i] == '[' || str[i] == ']' || str[i] == '{' || str[i] == '}')
                t[++l] = str[i];
            else if (str[i] == '/' && str[i + 1] == '*')
            {
                t[++l] = '<';
                i++;
            }
            else if (str[i] == '*' && str[i + 1] == '/')
            {
                t[++l] = '>';
                i++;
            }
        }
    }
    for(int i=0;t[i]!='\0';i++)
    {
        if(t[i] == '(' || t[i] == '[' || t[i] == '<' || t[i] == '{')
        {
            push(S,t[i]);
        }else if(t[i]==')')
        {
           if(S->data[S->top]=='(')
           {
               pop(S);
           }else
            {
                if (S->top == -1)
                    Lack_left( t[i] );
                else
                    Lack_right( S->data[S->top] );}
        }else if(t[i]==']')
        {
           if(S->data[S->top]=='[')
           {
               pop(S);
           } else
            {
                if (S->top == -1)
                    Lack_left( t[i] );
                else
                    Lack_right( S->data[S->top] );}
        }else if(t[i]=='}')
        {
            if(S->data[S->top]=='{')
           {
               pop(S);
           }else
            {
                if (S->top == -1)
                    Lack_left( t[i] );
                else
                    Lack_right( S->data[S->top] );}
        }else if(t[i]=='>')
        {
            if(S->data[S->top]=='<')
           {
               pop(S);
           }else
            {
                if (S->top == -1)
                    Lack_left( t[i] );
                else
                    Lack_right( S->data[S->top] );}
        }
    }
    if(S->top==-1)
    {
        printf("YES");
    }else
    {
        Lack_right( S->data[0] );
    }
    return 0;
}


运行结果及报错内容

无论我输入什么,结果都是相同的内容