在编译的时候没问题,但是运行时直接显示程序错误。但是如果加上printf("aaaa\n");之类就能够运行了。不明白,希望有大佬来指导解答一下。
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define n 11//顶点个数
#define Infinity 1000//无限
typedef struct{
char name[50];//景点名称
char introduction[256];//景点简介
char super_introduction[500];//经典的详细介绍
}vertexnode;//顶点
typedef struct{
vertexnode vertex[n+1];//一维数组存放所有顶点
int arc[n+1][n+1];//邻接矩阵
int path[n+1][n+1];//路径
}mgraph;//带权无向图
void mgraph_init(mgraph *a){//初始化带权无向图,并输入其中的信息(顶点中的信息和邻接矩阵)
strcpy(a->vertex[1].name,"西操场、鼎山楼、知行楼");strcpy(a->vertex[1].super_introduction,"\n西操场:西操场位于校园西侧,坐落在鼎山山脚下,内设排球场、篮球场、田径场。是同学上体育课的绝佳地点。\n鼎山:和茂岭山共同作为学校的标志,我校鼎山学堂由此得名。\n知行楼:得名于“知行合一”,表达了学校对同学们的殷切希望。内设模拟法庭,目前刑事司法学院和民商法学院在此学习。\n");
strcpy(a->vertex[1].introduction,"有足球场、篮球场,比东操场较小;法学院所在地,学校办公室");
strcpy(a->vertex[2].name,"茂陵山");strcpy(a->vertex[2].super_introduction,"\n茂岭山:因济南战役闻名,从校园内上山山路平坦,风景秀丽。因有不少解放军战士牺牲于此,\n所以校园内、山腰上有不少烈士墓。清明时节常常有人前来缅怀纪念。\n");
strcpy(a->vertex[2].introduction,"校内一座山,曾是解放济南战役战场遗址");
strcpy(a->vertex[3].name,"至善楼、致远楼");strcpy(a->vertex[3].super_introduction,"\n至善楼:目前至善楼是网络空间安全学院和外国语学院的同学学习生活的地方。内有多个机房、实验室、听力教室等等。\n致远楼:致远楼用于法学院和经济贸易法学院同学的学习和生活,另外致远楼有多个阶梯教室,可用于多种课程教学。");
strcpy(a->vertex[3].introduction,"网络空间安全学院、外国语学院、经济贸易法学院所在地");
strcpy(a->vertex[4].name,"文体馆");strcpy(a->vertex[4].super_introduction,"\n文体馆:位于学校中部偏东,内设游泳馆,瑜伽室,乒乓球馆和台球室等等,\n以供同学们上体育课、进行体育活动使用。二楼有印刷室,为大家打印资料提供了便利。\n");
strcpy(a->vertex[4].introduction,"室内运动场、游泳馆");
strcpy(a->vertex[5].name,"图书馆");strcpy(a->vertex[5].super_introduction,"\n图书馆:是省内藏书最多的高校图书馆之一,现有藏书256万册。始建于1979年,内设多个学科借阅室,\n学术氛围浓厚。还经常开展读者俱乐部、读书沙龙等活动,繁荣了文化氛围。\n");
strcpy(a->vertex[5].introduction,"读书圣地,建筑面积6666平方米");
strcpy(a->vertex[6].name,"一餐、二餐、礼堂、澡堂一");strcpy(a->vertex[6].super_introduction,"\n礼堂:位于学校南门口,第二餐厅楼上。是我校学术报告、文艺晚会、话剧公演、毕业典礼的举办地点。\n一餐二餐:位于南门,不仅便捷了学生用餐,也方便了来校的人们在这里用餐。\n澡堂:环境良好,每日晚上十点前为学生提供服务。\n");
strcpy(a->vertex[6].introduction,"学生餐厅,礼堂可举办中、大型学术会议;洗浴");
strcpy(a->vertex[7].name,"南大门");strcpy(a->vertex[7].super_introduction,"\n南大门:山东政法学院拆掉原来的大门,在门口两侧修建两个花坛,让更多的人来到校园内,\n了解我们学校的文化,也方便了济南居民一览茂陵山美景,了解茂陵战役。\n");
strcpy(a->vertex[7].introduction,"学校大门、学校班车进出口");
strcpy(a->vertex[8].name,"校医院、新南小门");strcpy(a->vertex[8].super_introduction,"\n校医院:为给学生提供更好的服务,我校的校医院进行了翻修,保障了学生的健康情况,\n校医都有多年的行医经验。新小南门:为了缓解南大门的交通压力,我校又建造了新小南门,也方便了学生的出行。\n");
strcpy(a->vertex[8].introduction,"可买药,看小病的地方;距离校医院和教工餐厅、新澡堂比较近");
strcpy(a->vertex[9].name,"东操场、三餐");strcpy(a->vertex[9].super_introduction,"\n东操场:在东操场,我们开展了田径,健美操,太极扇,女子防身术,大保健,羽毛球,乒乓球等体育课程,\n也是学生利用体育活动放松自己的主要场所。\n 三餐:三餐是靠近东门几个餐厅里最大的一个,共有三层,食物品种多样,\n又在第三层加了独具特色的火锅,饺子,甜品,深受学生党的喜爱。\n");
strcpy(a->vertex[9].introduction,"举办大、中型体育活动处;学生食堂,人气较高");
strcpy(a->vertex[10].name,"菜鸟驿站");strcpy(a->vertex[10].super_introduction,"\n菜鸟驿站:负责接收并整理分类学生的快递,也为学生提供在校兼职的机会。\n极大的辩解了学生的生活。\n");
strcpy(a->vertex[10].introduction,"收发快递处");
strcpy(a->vertex[11].name,"东门");strcpy(a->vertex[11].super_introduction,"\n东门:为临近东门的住校学生提供了出行的方便。\n");
strcpy(a->vertex[11].introduction,"距离小吃街、公交车站、天联超市较近");
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
a->arc[i][j]=Infinity;
a->path[i][j]=-1;
}
a->arc[1][2]=60;a->arc[1][5]=70;a->arc[2][3]=40;a->arc[2][4]=40;a->arc[3][4]=15;a->arc[3][9]=10;a->arc[3][10]=30;
a->arc[4][5]=30;a->arc[4][9]=20;a->arc[5][6]=60;a->arc[5][7]=60;a->arc[5][8]=30;a->arc[5][9]=40;a->arc[6][7]=10;
a->arc[7][8]=30;a->arc[8][9]=50;a->arc[8][11]=200;a->arc[9][10]=35;a->arc[9][11]=10;a->arc[10][11]=20;
//由于是矩阵是对称的,所以只要输入上半部分,后对称输入即可
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
{
a->arc[j][i]=a->arc[i][j];
}
}
}
void school_map()//│││││ ┌┌┌ ╰╰╰╭═ ╭═ ═╰═ ╭╭= =╮ =╯ =■□■□ ══=
{ printf(" -------------------------------------------------地图------------------------------------------------\n");
printf(" ---------------------------------------------------------------------------------------------------------\n");
}
void floyd(mgraph *a){
int i,j,k;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(a->arc[i][j]>a->arc[i][k]+a->arc[k][j]){
a->arc[i][j]=a->arc[i][k]+a->arc[k][j];
a->path[i][j]=k;
}
}
}
void print(mgraph *a){
int i,j;
for(i=1;i<=n;i++){
printf("\n");
for(j=1;j<=n;j++)
printf("%d ",a->arc[i][j]);
}
}
int main()
{
int choice;
mgraph *a=(mgraph*)malloc(sizeof(mgraph));
if(!a){
printf("地址分配失败。\n");
}
//printf("aaaaaa\n");
mgraph_init(a);
printf("请输入您的选择:");
do{
scanf("%d",&choice);
switch(choice){
case 1:floyd(a);print(a);break;
case 0:break;
}
}while(choice!=0);
return 0;
}
缓冲区满了.
你把那句printf换成fflush(stdin);
就运行成功了