为啥运行结果会变成这样?

img



```c

define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define MAX
#define INFINITY 2147483648
#define OK 1
#define Error 0
typedef enum { DG, DN, UDG, UDN }GraphKind;
typedef char VertexData;
typedef struct ArcNode
{
    int adj;
}ArcNode;
typedef struct
{
    VertexData vexs[5];
    ArcNode arcs[5][6];
    int vexnum, arcnum;
    GraphKind kind;
}AdjMatrix;

int LocateVertex(AdjMatrix* G, VertexData v)
{
    int j = Error, k;
    for (k = 0;k < G->vexnum;k++)
        if (G->vexs[k] == v)
        {
            j = k;
            break;
        }
    return(j);
}

int CreateDN(AdjMatrix* G)
{
    int i, j, k, weight;
    VertexData v1, v2;
    printf("输入图的顶点数和弧数:\n");    
    scanf("%d,%d", &G->vexnum, &G->arcnum);
    for (i = 0;i < G->vexnum;i++)
        for (j = 0;j < G->vexnum;j++)
            G->arcs[i][j].adj = INFINITY;
    printf("输入图的顶点");
    for (i = 0;i < G->vexnum;i++)
    {
        getchar();
        scanf("%c", &G->vexs[i]);
    }
    for (k = 0;k < G->arcnum;k++)
    {
        printf("输入弧的两个顶点和权值:\n");
        scanf("%c,%c,%d", &v1, &v2, &weight);
        i = LocateVertex(G, v1);
        j = LocateVertex(G, v2);
        G->arcs[i][j].adj = weight;
    }
    G->kind = DN;
    for (i = 0;i < G->vexnum;i++)
    {
        for (j = 0;j < G->vexnum;j++)
        {
            printf("%d ", G->arcs[i][j].adj);
        }
    }
    return(OK);
}
int main()
{
    AdjMatrix G;
    CreateDN(&G);
}

```

scanf("%c,%c,%d", &v1, &v2, &weight);之后,要加 getchar(),否则下一个%c接收换行符了
另外53行for循环前,也要加getchar(),否则上一个循环最后输入的换行符会被接收

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define MAX
#define INFINITY 2147483648
#define OK 1
#define Error 0
typedef enum { DG, DN, UDG, UDN }GraphKind;
typedef char VertexData;
typedef struct ArcNode
{
    int adj;
}ArcNode;
typedef struct
{
    VertexData vexs[5];
    ArcNode arcs[5][6];
    int vexnum, arcnum;
    GraphKind kind;
}AdjMatrix;
int LocateVertex(AdjMatrix* G, VertexData v)
{
    int j = Error, k;
    for (k = 0;k < G->vexnum;k++)
        if (G->vexs[k] == v)
        {
            j = k;
            break;
        }
    return(j);
}
int CreateDN(AdjMatrix* G)
{
    int i, j, k, weight;
    VertexData v1, v2;
    printf("输入图的顶点数和弧数:\n");    
    scanf("%d,%d", &G->vexnum, &G->arcnum);
    for (i = 0;i < G->vexnum;i++)
        for (j = 0;j < G->vexnum;j++)
            G->arcs[i][j].adj = INFINITY;
    printf("输入图的顶点");
    for (i = 0;i < G->vexnum;i++)
    {
        getchar();
        scanf("%c", &G->vexs[i]);
    }
    getchar();
    for (k = 0;k < G->arcnum;k++)
    {
        printf("输入弧的两个顶点和权值:\n");
        scanf("%c,%c,%d", &v1, &v2, &weight);
        getchar();
        i = LocateVertex(G, v1);
        j = LocateVertex(G, v2);
        G->arcs[i][j].adj = weight;
    }
    G->kind = DN;
    for (i = 0;i < G->vexnum;i++)
    {
        for (j = 0;j < G->vexnum;j++)
        {
            printf("%d ", G->arcs[i][j].adj);
        }
    }
    return(OK);
}
int main()
{
    AdjMatrix G;
    CreateDN(&G);
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632