if(ch1==G->vexs[j]&&ch2==G->vexs[k])为什么没有起到判断作用,如何才能判断两个string中的汉字相同?


#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>
using namespace std;
#define MAX 100//最大顶点数
typedef struct
{//邻接矩阵结构
    int n,e;//顶点数n,边数e
    string vexs[MAX];//顶点数组
    int edges[MAX][MAX];//边的邻接矩阵
}MGraph;
void Menu()
{//显示菜单子函数
    printf("\n               简单城市交通网系统");
    printf("\n==============================================");
    printf("\n|              1--城市信息维护                 |");
    printf("\n|              2--连通信息维护                 |");
    printf("\n|              3--深度优先遍历                 |");
    printf("\n|              4--广度优先遍历                 |");
    printf("\n|              5--最小生成树                   |");
    printf("\n|              0--退出                         |");
    printf("\n==============================================");
    printf("\n请输入菜单号(0-5):");
}
void CreateMGraph(MGraph *G){
    FILE *fp=fopen("E:\\code\\sjjg\\计科Z62103班04_Graph.txt","rt+");
    if(fp==NULL){
        printf("读取文件失败!");
        fclose (fp);
    }
    string ch1,ch2;
    fscanf(fp,"%d",&G->n);
    fscanf(fp,"%d",&G->e);
    printf("顶点数为:%d\n",G->n);
    printf("边数为:%d\n",G->e);
    for(int i=0;i<G->n;i++){
        fscanf(fp,"%s",G->vexs[i]);
    }
    for(int i=0;i<G->n;i++){
        printf("%s\n",G->vexs[i]);
    }
    for(int i=0;i<G->n;i++){
        for(int j=0;j<G->n;j++){
            G->edges[i][j]=0;
        }
    }
    for(int i=0;i<G->n;i++){
        for(int j=0;j<G->n;j++)
            printf("%5d",G->edges[i][j]);
        printf("\n");
    }
    //邻接矩阵元素置0
    for(int i=0;i<G->e;i++){
        fscanf(fp,"%s",ch1);
        fscanf(fp,"%s",ch2);

        for(int j=0;j<G->n;j++){
            printf("%s",ch1);
            printf("%s\n",G->vexs[j]);
                for(int k=0;k<G->n;k++)
                    if(ch1==G->vexs[j]&&ch2==G->vexs[k]){
                        printf("%s",ch2);
                        printf("%s\n",G->vexs[k]);
                        fscanf(fp,"%d",&(G->edges[j][k]));
                        printf("%d\n",G->edges[j][k]);
                        G->edges[k][j]=G->edges[j][k];
                }
        }
    }
}
void DispMGraph(MGraph G){//图的邻接矩阵输出函数
    for(int i=0;i<G.n;i++){
        for(int j=0;j<G.n;j++)
            printf("%5d",G.edges[i][j]);
        printf("\n");
    }
}
void main(){
    MGraph G;
    CreateMGraph(&G);
    DispMGraph(G);
    system("pause");
}

从文件里用fscanf(fp,"%s",G->vexs[i])读取的如果是最后一个数据项,那么这个字符串末尾可能是换行符。所以你用没有换行符的ch1字符串比较是不相等的

42行你已经加了测试代码,输出了这个数组元素,你看看有没有输出一条数据后,后面出现一个空行的情况