不能进入到创建图的函数里面去

//以邻接矩阵作为图的存储结构,创建无向图。 #include #include #define M 200 #define Max 32767 typedef struct { char vexs[M]; int arcs[M][M]; int vexnum, arcnum;//顶点数,边数 } Graph; //返回位置函数 int Locatevex(Graph *G, char v) { int i; for (i = 0; i < G->vexnum; i++) { if (G->vexs[i] == v) return i; } return -1; } void CreateGraph(Graph *G) { int i, j, k, v1, v2, w; printf("请输入你要生成图的顶点数和边数:"); scanf("%d%d", &G->vexnum, &G->arcnum); for (i = 0; i < G->vexnum; i++) { printf("请输入第%d个顶点信息:", i + 1); scanf("%c", G->vexs[i]); } for (i = 0; i < G->vexnum; i++) { for (j = 0; j < G->vexnum; j++) { G->arcs[i][j] = 32767; if (i == j) { G->arcs[i][j] = 0; } } } printf("请输入两个顶点和对应边的权值:\n"); for (k = 0; k < G->arcnum; i++) { scanf("%c%c%d", &v1, &v2, &w); i = Locatevex(G, v1); j = Locatevex(G, v2); G->arcs[i][j] = w; G->arcs[j][i] = G->arcs[i][j]; } } void PrintGraph(Graph *G) { int i, j; printf("邻接矩阵为:\n"); for (i = 0; i < G->vexnum; i++) { printf(" %c", G->vexs[i]); } printf("\n"); for (i = 0; i < G->vexnum; i++) { printf("%c ", G->vexs[i]); for (j = 0; j < G->vexnum; j++) { if (G->arcs[i][j] == 32767) { printf("$"); } else { printf("%d", G->arcs[i][j]); } } } printf("\n"); } void menu () { printf("**************************\n"); printf("**1.创建图 2.打印图**\n"); printf("**3.深度优先 4.广度优先**\n"); printf("**5.退出 **\n"); printf("**************************\n"); } int main() { int i, num; Graph G; while (1) { menu();//选择菜单 printf("请输入你要选择的功能:"); scanf("%d", num); switch (num) { case 1: CreateGraph(&G);//创建图 break; case 2: PrintGraph(&G);//打印图 break; case 5: exit(0); break; } } return 0; }

#define M 200 
#define Max 32767 
typedef struct { 
char vexs[M]; 
int arcs[M][M]; 
int vexnum, arcnum;//顶点数,边数 
} Graph; 
//返回位置函数 
int Locatevex(Graph *G, char v) 
{ 
	int i; 
	for (i = 0; i < G->vexnum; i++) 
	{ 
		if (G->vexs[i] == v) 
		return i; 
	} return -1; 
} 
void CreateGraph(Graph *G) 
{ 
	int i, j, k, v1, v2, w; 
	printf("请输入你要生成图的顶点数和边数:"); 
	scanf("%d %d", &G->vexnum, &G->arcnum); 
	for (i = 0; i < G->vexnum; i++) 
	{ 
		printf("请输入第%d个顶点信息:", i + 1); 
		scanf(" %c", &G->vexs[i]); /*错误1,%c前面需要加空格*/
	} 
	for (i = 0; i < G->vexnum; i++) 
	{ 
		for (j = 0; j < G->vexnum; j++) 
		{ 
			G->arcs[i][j] = 32767; 
			if (i == j) 
			{ 
				G->arcs[i][j] = 0; 
			} 
		} 
	} 
	printf("请输入两个顶点和对应边的权值:\n"); 
	for (k = 0; k < G->arcnum; k++) 
	{ 
		scanf(" %c %c %d", &v1, &v2, &w);/*错误2,需要空格分开*/
		i = Locatevex(G, v1); 
		j = Locatevex(G, v2); 
		G->arcs[i][j] = w; 
		G->arcs[j][i] = G->arcs[i][j];
	} 
} 
void PrintGraph(Graph *G) 
{ 
	int i, j; 
	printf("邻接矩阵为:\n"); 
	for (i = 0; i < G->vexnum; i++) 
	{ 
		printf(" %c", G->vexs[i]); 
	} 
	printf("\n"); 

	for (i = 0; i < G->vexnum; i++) 
	{ 
		printf("%c ", G->vexs[i]); 
		for (j = 0; j < G->vexnum; j++) 
		{ 
			if (G->arcs[i][j] == 32767) 
			{ 
				printf("$"); 
			} 
			else 
			{ 
				printf("%d", G->arcs[i][j]);
			} 
		} 
	}

printf("\n"); 
} 
void menu () 
{ 
	printf("**************************\n");
	printf("**1.创建图 2.打印图**\n"); 
	printf("**3.深度优先 4.广度优先**\n"); 
	printf("**5.退出 **\n");
	printf("**************************\n");
} 

int main() 
{ 
	int i, num; 
	Graph G; 
	while (1) 
	{ 
		menu();//选择菜单 
		printf("请输入你要选择的功能:"); 
		scanf("%d", &num);/*错误3,需要加&*/
		switch (num) 
		{ 
			case 1: 
				CreateGraph(&G);//创建图 
			break; 
			case 2: 
				PrintGraph(&G);//打印图 
			break;
			case 5: 
				exit(0); 
			break; 
		} 
	} 
		return 0; 
}

问题写到注释当中了,流程都能进去了,看看还有没有其他类似的问题,scanf的用法你需要再研究一下,兄弟