公园导游系统,程序没有报错,但是读取文件有问题
程序源码:#include<stdio.h>
#include<malloc.h>
#include <windows.h>
#include<stdlib.h>
#define MAXV 50 //最大顶点个数
#define INF 32767 //INF表示∞
typedef struct {
int no; //顶点编号
char info[MAXV]; //顶点其他信息
char introduction[100]; //景点简介
} VertexType; //顶点类型
typedef struct //图的定义
{
int edges[MAXV][MAXV]; //邻接矩阵
int n, e; //顶点数,弧数
VertexType vexs[MAXV]; //存放顶点信息
} MGraph;
int visited[MAXV] = {0}; //访问标记数组
int n = 0;
MGraph *create(MGraph *g, int (*a)[MAXV]);
void MFindAllPath(MGraph *g, int u, int v, int path[], int d);
void disp(MGraph *g);
void MFindAllPath(MGraph *g, int u, int v, int path[], int d) { //d表示path中的路径长度,初始为-1
int i;
d++;
path[d] = u; //路径长度d增1,顶点u加入到路径中
visited[u] = 1; //置已访问标记
if (u == v && d >= 0) //找到一条路径则输出
{
n++;
Sleep(600);
printf(" %d: ", n);
for (i = 0; i <= d; i++) {
printf("%s", g->vexs[path[i]].info);
if (path[i] != v)
printf(" -> ");
}
printf("\n");
}
for (int j = 0; j < g->n; j++) //深度递归搜索
if (!visited[j] && g->edges[u][j] != INF && g->edges[u][j] != 0)
MFindAllPath(g, j, v, path, d); //dfsm(g,j);
visited[u] = 0; //恢复环境,使该顶点可重新使用
}
MGraph *create(MGraph *g, int (*a)[MAXV]) //邻接矩阵创建图
{
int i, j = 0, k = 0;
g = (MGraph *) malloc(sizeof(MGraph));
printf("\n 四川青羊宫景点信息: \n");
g->n = 11;
g->e = 15;
FILE *fp1;
fp1 = fopen("v1.txt", "r");
i = 0;
if (fp1 != NULL) {
while (!feof(fp1)) {
g->vexs[i].no = i;
fscanf(fp1, "%s %s" , g->vexs[i].info, g->vexs[i].introduction);
i++;
}
}
else
printf ("fail to open!\n");
fclose(fp1);
for (i = 0; i < g->n; i++)
for (j = 0; j < g->n; j++) {
g->edges[i][j] = *(a[i] + j); //有向图类型
}
return g;
}
//显示图的景点信息
void disp(MGraph *g) {
int i, k = 0;
printf("\n 编号 景点名称 \n");
printf(" --------------------------------------\n");
for (i = 0; i < g->n; i++)
printf(" %d %s\n", i, g->vexs[i].info);
printf("\n --------------------------------------\n");
}
void menu1() {
printf("\n");
printf(" ******公园导游程序设计******\n");
printf(" ============================================\n");
printf(" 1.公园景点介绍\n");
printf(" 2.从入口到展览室的游览线路\n");
printf(" 3.求两景点间的最短路径\n");
printf(" 4.直饮水管道修建方案\n");
printf(" 5.退出 :\n");
printf(" =============================================\n");
}
//主函数
int main(void) {
int c, b, e;
int path[MAXV];
int change = 1;
char begin[MAXV], end[MAXV];
MGraph *g = NULL;
int A[MAXV][MAXV] = {
{0, 20, INF, INF, INF, INF, INF, INF, INF, INF, INF},
{20, 0, 35, INF, INF, INF, INF, INF, INF, INF, INF},
{INF, 35, 0, 40, INF, INF, INF, INF, INF, INF, INF},
{INF, INF, 40, 0, 40, 45, INF, 60, INF, INF, INF},
{INF, INF, INF, 40, 0, INF, 50, INF, INF, INF, INF},
{INF, INF, INF, 45, INF, 0, 40, 50, 60, INF, INF},
{INF, INF, INF, INF, 50, 40, 0, INF, 150, INF, 250},
{INF, INF, INF, 60, INF, 50, INF, 0, 30, 100, INF},
{INF, INF, INF, INF, INF, 60, 150, 30, 0, INF, INF},
{INF, INF, INF, INF, INF, INF, INF, 100, INF, 0, 200},
{INF, INF, INF, INF, INF, INF, 250, INF, INF, 200, 0}};
menu1();
while (change) {
printf(" \n\n请选择(1-5):");
scanf("%d", &c);
switch (c) {
case 1:
g = create(g, A);
disp(g);
break;
case 2:
printf("\n请输入游览的起点和终点(起点序号,终点序号):");
scanf("%d,%d", &b, &e);
strcpy(begin, g->vexs[b].info);
strcpy(end, g->vexs[e].info);
n = 0;
printf("\n------------------------------------------从【公园%s ->%s】的游览线路-----------------------------------\n\n",
begin, end);
MFindAllPath(g, b, e, path, -1); //dfsm(g,0);
printf("\n-----------------------------------------------------------------------------------------------------------------\n\n");
break;
case 5:
change = 0;
printf("\n已退出!");
break;
}
}
printf("\n");
return 0;
}
我在读取这个v1.txt的时候,他这个文件中的信息没有显示出来
txt文件内容如下:
正门 青羊宫入口。
混元殿 混元殿是青羊宫的第二重大殿,重建于清光绪年间。
八卦台 八卦亭是青羊宫中最为精美的建筑物,也是标志性建筑。
铜羊 由成都张柯氏特请云南匠师陈文炳、顾体仁于道光九年〈一八二九年〉铸造的,以配独角青羊。
说法台 说法台上原塑有老子对关令尹喜说法之像。相传太上老君曾在此现身升座为关令尹喜讲经说法。
降生台 降生台建于清康熙年间(1662-1722),祭祀的是太上圣母。台上殿内塑有太上无极圣母(即太上老君之母)神像和老君降生像。
唐王殿 紫金台又名唐王殿,祭祀的是李渊、李世民父子。
展览室 展览物品。
吕祖像 最灵验的“二仙庵”。
烈士墓 烈士墓安葬着36位为新中国成立而捐躯的革命烈士。
揽胜 青羊宫,川西第一道观,坐落在成都西南郊。
希望能有大哥可以帮我解决一下这个问题。