printf scanf有错误,错误很奇怪,内存错误
#include <stdio.h>#define MAX 500#define maxvernum 50typedef struct{ int t_number; char t_name[20];}bustop;typedef struct{ int l_number; int l_quantity; int l_busstop[10]; char l_name[20];}busline;typedef struct{ int vexs[maxvernum]; bustop top[maxvernum]; busline line[maxvernum]; int adjmatrix[maxvernum][maxvernum]; int n,m,b; //图中的站点数(顶点数)n与线路数m、图中的边数b;}mgraph;/*创建公交线路图*/void Create_Mgragh(mgraph &g){ int i,j; printf("请输入公交站点数和公交线路数和边数:\n"); scanf("%d%d%d",&g.n,&g.m,&g.b); printf("请输入站点的编号与名称:\n"); for(i=1;i<=g.n;i++) scanf("%d%c",&g.top[i].t_number,&g.top[i].t_name); for(i=1;i<=g.m;i++) { printf("请输入公交线路的编号与该线路包含的站点数:\n"); scanf("%d%d", &g.line[i].l_number,&g.line[i].l_quantity); printf("该线路经过的站点是:"); for(j=1;j<=g.line[i].l_quantity;j++) scanf("%d",&g.line[i].l_busstop[j]); } //邻接矩阵初始化为0 for(i=1;i<=g.n;i++) for(j=1;j<=g.n;j++) g.adjmatrix[i][j]=0; printf("该图所有边的顶点:\n"); for(i=1;i<=g.b;i++) { int h,s; scanf("%d%d",&h,&s); g.adjmatrix[h][s]=1; g.adjmatrix[s][h]=1; } printf("*************************************************\n"); printf("输出图的邻接矩阵如下: *\n"); for(i=1;i<=g.n;i++) { {for(j=1;j<=g.n;j++) printf("%d\t",g.adjmatrix[i][j]); printf("*"); printf("\n"); } } printf("*************************************************\n");}int menu(){ printf("*********************公交系统******************\n"); printf("*操作代码如下: *\n"); printf("* 1、建立公交线路图。 *\n"); printf("* 2、查询最佳乘车路线。 *\n"); printf("* 3、退出程序。 *\n"); printf("***********************************************\n"); return 1;}void SearchDijkstra(mgraph g,int w,int v){ int pre[6],dist[6],a[6]; int i,j,p,min,k, top=0; for(i=1;i<=g.n;i++) //初始化数组dist和pre. { dist[i]=g.adjmatrix[w][i]; if(dist[i]==0) pre[i]=0; else pre[i]=w; } pre[w]=0; dist[w]=0; g.adjmatrix[w][w]=1; for(p=1;p<=g.n;p++) { min=MAX; j=-1; for(i=1;i<=g.n;i++) if((g.adjmatrix[i][i]==0)&&(dist[i]<min)&&dist[i]) {j=i; min=dist[i];} if(j==-1) break; else { g.adjmatrix[j][j]=1; for(i=1;i<=g.n;i++) if((g.adjmatrix[i][i]==0)&&g.adjmatrix[j][i]&&!dist[i]) { dist[i]=min+g.adjmatrix [j][i]; pre[i]=j; } } }//for printf("-------------------------------------------------\n"); for(i=1;i<=g.n;i++) { printf("%d\t",pre[i]); } printf("|"); printf("\n"); for(i=1;i<=g.n;i++) { printf("%d\t",dist[i]); } printf("|"); printf("\n"); printf("-------------------------------------------------\n"); /*输出路径*/ printf("该站点");printf("%d",w); printf("到站点");printf("%d",v); printf("的最佳乘车路线如下:\n"); if(pre[v]==w) {printf("%d",w); printf(" —> "); printf("%d",v);} else if(pre[v]) { a[++top]=v; while(pre[v]!=w) { k=pre[v]; a[++top]=k; v=k; } printf("%d",pre[v]); //pre[v]==w; while(top) { printf("—>"); printf("%d",a[top--]); } } else printf("不存在路径\n"); }void main(){ mgraph M; int p=1,w,v; menu(); printf("\n"); printf("请选择操作的代码:"); scanf("%d",&p); while(0<p&&p<3) { switch(p) { case 1: Create_Mgragh(M); break; case 2: printf("请选择查询的两个站点的最佳路线为:"); scanf("%d%d",&w,&v); SearchDijkstra(M,w,v); printf("\n"); break; }//switch printf("\n"); printf("请继续选择操作的代码:"); scanf("%d",&p); //错误在这里附近 }//while}