程序运行到输入起点回车就结束了,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
int main()
{
int a = 0;
int b = 0;
int c = 0;
int ciao = 0;//ciao 是笔者随意取的一个中间变量
scanf(“%d %d %d”, &a, &b, &c);
if (a < b || a ==b)
{
ciao = a;
a = b;
b = ciao;
}
if (a < c || a == c)
{
ciao = a;
a = c;
c = ciao;
}
if (b < c || b == c)
{
ciao = b;
b = c;
c = ciao;
printf(“%d %d %d”, a, b, c);
}
else
{
printf(“%d %d %d”, a, b, c);
}
return 0;`