简易城市交通网城市名称的添加结果总是错的,求帮助

对城市交通网的操作,添加城市名称一直有误,希望帮忙看看错在哪里

void Add(MGraph *G)  
{
    int i,j;
    NData vi;
    strcpy(G->vexs[G->n],vi);
    G->n++;
    printf("添加后共有%d个城市,%d条路线\n",G->n,G->e);
    for(i=0;i<G->n;i++)
    {
        printf("%-5s",G->vexs[i]);
    }
    printf("%5s",G->vexs[i]);
    printf("\n");
    for(i=0;i<G->n;i++)
    {
        G->edges[i][G->n-1]=max;
        G->edges[G->n-1][i]=max;
    }
    for(i=0;i<G->n;i++)
        for(j=i;j<G->n;j++)
            if(G->edges[i][j]!=max)
                printf("%-10s%5s%10d\n",G->vexs[i],G->vexs[j],G->edges[i][j]);
    printf("交通图的邻接矩阵为:\n");
    for(i=0;i<G->n;i++)
    {
        for(j=0;j<G->n;j++)
        printf("%-6d",G->edges[i][j]);
        printf("\n");
    }
}

void AddCity(MGraph *G)        
{
    int i,j;
    NData vi;
    printf("请输入您要添加的城市:");
    scanf("%s",&vi);
    for(i=0;i<G->n;i++)
    {
        if(strcmp(vi,G->vexs[i])==0)
        {
            printf("您要添加的城市已存在,无法添加\n");
            break;
        }
    }
    if(i==G->n)
    Add(G);
}    

如果程序运行结果是对的,广州的后面应该是长沙

img

第37行, scanf("%s",&vi); 多了 ‘&’ 符,应修改为: scanf("%s",vi);