关于#c语言#的问题:程序运行到输入起点回车就结束了,qiu怎样解决#include <stdio.h>

程序运行到输入起点回车就结束了,qiu怎样解决


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define INFINITY 10000
#define M 100
//图的邻接矩阵存储数据类型定义
typedef struct{
    char V[M][100];//顶点数组,用来存储辖区的值即辖区的名称
    int R[M][M];
    int vexnum;//辖区的个数
}Graph;
//位置函数,查找辖区在整个辖区图中的位置
int locatevex(Graph*g,char a[100]) 
{
    int i;
    for(i=0;i<g->vexnum;i++)
    {
        if(strcmp(a,g->V[i])==0)
        return i;
        
    }
    if(i==g->vexnum)
    return -1;
}
//创建辖区的无向图,图中含有n个结点,创建辖区邻接矩阵
int creategraph(Graph *g)
{
    int i=0,j,k,p,m;
    char a[100],b[100];
    printf("\n");
    printf("   ******欢迎使用地铁站建设程序******\n");
    printf("   ******请按照提示依次输入信息******\n");
    printf("   ******请输入所有的辖区,以0作为结束标志******\n");
    scanf("%s",g->V[i]);
    while(strcmp("0",g->V[i])!=0)
    {
        i++;
        scanf("%s",g->V[i]);
    }
    g->vexnum=i;
    for(i=0;i<g->vexnum;i++)
    for(j=0;j<g->vexnum;j++)
    g->R[i][j]=INFINITY;
    printf("******请输入各辖区之间的路程,以00作为结束标志******\n");
    scanf("%s%s%d",a,b,&m);
    while(strcmp("0",a)!=0 || strcmp("0",b)!=0 || m!=0)
    {
        k=locatevex(g,a);
        p=locatevex(g,b);
        if(k==-1)
        {
            printf("******对不起,输入错误,没有%s这个辖区******\n",a);
            return 0;
            
        }
        if(p==-1)
        {
            printf("******对不起,输入错误,没有%s这个辖区******\n",b);
            return 0;
        }
        g->R[k][p]=g->R[p][k]=m;
        scanf("%s%s%d",a,b,&m);
    }
    return 1;
}

struct tree{
    int weizhi;
    int lowcost;
};
//构建顶点数组,用来存储各个辖区的值,即辖区的名称;
//构建邻接矩阵,邻接矩阵的元素值为辖区之间的距离;

//用最小生成树的结点算法,算出辖区与辖区之间的最小距离;
int minimun(struct tree*a,Graph g)
{
    int i,k,m=0;
    for(i=0;i<g.vexnum;i++)
    {
        if(m==0&&a[i].lowcost!=0)
        {
            m=1;
            k=i;
        }
        if(m==1&&a[i].lowcost!=0)
        {
            if(a[i].lowcost<a[k].lowcost)
            k=i;
        }
    }
    return k;
}
//普利姆算法生成最小生成树
void MiniSpanTree_PRIM(Graph g,char a[100])
{
    struct tree closedge[M];
    int i,j,k,money=0;
    k=locatevex(&g,a);
    for(i=0;i<g.vexnum;i++)
    {
        if(i!=k)
        {
            closedge[i].lowcost=g.R[k][j];
            closedge[i].weizhi=k;    
        }
    } 
    
    closedge[k].lowcost=0;
    printf("******根据您的输入建立邻接表为:******");
    getchar();
    for(i=0;i<g.vexnum;i++)
    {
        for(j=0;j<g.vexnum;j++)
        {
            printf("l%dl",g.R[i][j]);
        }
        printf("\n\n");
        getchar();
     } 
     printf("******应建设地铁去辖区及之间权值为:******\n");
     getchar();
     for(i=1;i<g.vexnum;i++)
     {
         k=minimun(closedge,g);
         money=money+closedge[k].lowcost;
         printf("%d:%s  %s %d\n",i,g.V[closedge[k].weizhi],g.V[k],closedge[k].lowcost);
         closedge[k].lowcost=0;
         for(j=0;j<g.vexnum;j++)
         {
             if(g.R[k][j]<closedge[j].lowcost)
             {
                 closedge[j].weizhi=k;
                 closedge[j].lowcost=g.R[k][j];
             }
         }
     }
    printf("******据统计地铁的总建设路程为;%d******\n",money);
    getchar();
     
}
int main()
{
    int i;
    Graph g;
    char a[10];
    i=creategraph(&g);
    if(i)
    {
        printf("******请输入起始地点为:******\n");
            getchar();
        scanf("%s",a);
        MiniSpanTree_PRIM(g,a);
        }
        getchar() ;
    printf("******感谢您的使用,谢谢!******\n\n");
}

char a[10],数组长度是不是小了啊,函数参数指定的a数组长度都是100