用scanf循环给二维数组赋值后需再用scanf后出错

#include<stdio.h>
#define MAXSIZE 3
typedef char Vertice;
typedef int Edge;
typedef struct
{
    Vertice vexs[MAXSIZE];
    Edge arc[MAXSIZE][MAXSIZE];
    //int numNodes, numEdeges;
}MGraph;
int Creat_Graph(MGraph* MG)
{
/*    printf("点的个数,边的个数:");
    scanf_s("%d,%d", MG->numNodes, MG->numEdeges);*/
    printf("点的值:");
    for (int i = 0; i < MAXSIZE; i++)
    {
        //scanf_s("%c", &(MG->vexs[i]));
        MG->vexs[i] = getchar();
    }
    //getchar();
    printf("边的关系:");
    for(int i=0;i<MAXSIZE;i++)
        for (int j = 0; j < MAXSIZE; j++)
        {
            int a;
            scanf_s("%d", &a);
            MG->arc[i][j] = a;
            //printf("arc[%d][%d]的值为:%d", i, j, MG->arc[i][j]);
        }
    //getchar();
    return 0;
}
void Check_Edge(MGraph M)
{
    char a;
    int i = 0, n1 = 0, n2 = 0;
    printf("请输入要查询顶点:");
    a = getchar();
    for (i; a != M.vexs[i]; i++);
    for (int x = 0; x < MAXSIZE; x++)
        n1 += M.arc[i][x];
    printf("%c的出度是%d\n", a, n1);
    for (int y = 0; y < MAXSIZE; y++)
        n2 += M.arc[y][i];
    printf("%c的入度是%d\n", a, n2);
}
int main()
{
    MGraph G;
    Creat_Graph(&G);
    Check_Edge(G);
    return 0;
}

在使用了scanf_s函数的前面都加上下面的语句

fflush(stdin);

程序应该就正常 了。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y