标题:公园导游系统,程序没有报错,但是读取文件有问题
只看楼主
yang158
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2019-3-12
结帖率:16.67%
 问题点数:0 回复次数:0 
公园导游系统,程序没有报错,但是读取文件有问题
程序源码:
#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位为新中国成立而捐躯的革命烈士。
揽胜                  青羊宫,川西第一道观,坐落在成都西南郊。


希望能有大哥可以帮我解决一下这个问题。
搜索更多相关主题的帖子: printf int void INF path 
2020-03-26 12:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500602-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014788 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved