上下无关文法的存储不能得到想要的结果

上下无关文法的存储,用了两个结构体来存储左部和右部
右部里面又定义的有next指针是为了调用下一个,因为可能存在右部有两个甚至多个式子
通过输入一个非终结符,找到相应的产生式

#include
using namespace std;
const int MaxVnNum = 20;
const int MaxVtNum = 20;
const int Max = 20;
struct Vt {
    int num;
    char right[Max];
    struct Vt *next;
};
struct Vn {
    char vn;
    struct Vt vt;
};
struct Vn grammar[MaxVnNum];
void enter(int n)
{
    //struct Vn grammar[MaxVnNum];
    int rcount = 0;
    char left;
    for (int i = 0; i < n; i++)
    {
        cout << "输入左部:" ;
        cin >> left;
        string exper;
        grammar[i].vn = left;
        cout << "输入右部文法个数:" ;
        cin >> rcount;
        for (int j = 0; j < rcount; j++)
        {
            grammar[i].vt.num = j + 1;
            cout << "输入第j+1个表达式:";
            cin >> exper;
            for (int m = 0; m < exper.length(); m++)
            {
                grammar[i].vt.right[m] = exper[m];
            }
            grammar[i].vt.next;

        }


    }
}
void search(char L,int n)
{
    int x;
    bool a = false;
    for (int i = 0; i < n; i++)
    {
        if (L == grammar[i].vn)
        {
            cout << "找到对应非终结符" << endl;
            cout << "输入查找的第几个式子:";
            cin >> x;
            for (int j = 0; j < x; j++)
            {
                if (grammar[i].vt.num == x)
                {
                    a = true;
                    cout << L << "->";
                    cout << grammar[i].vt.right << endl;
                }
                grammar[i].vt.next;
            }
            
        }
    }
    if (!a)
    {
        cout << "没有找到对应的产生式";
    }
}
int main()
{
    //输入产生式个数
    cout << "输入产生式个数"<int n;
    cin >> n;
    //输入产生式,进行存储
    enter(n);
    //输入要寻找的产生式
    char w;
    cout << "输入要寻找的非终结符的产生式" << endl;
    cin >> w;
    search(w,n);
}

图片里面输出了两遍,而且不是想要的结果,不知道问题出在哪里,是没有存储进去嘛,帮忙看看代码,应该修改哪里?

img

img

struct Vn {
    char vn;
    struct Vt vt;
};

这里的 vt也应该是数组才行啊 。不然你只是存储了最后一个