在写程序的过程中,若连续使用 scanf 函数进行数据信息的输入的话,需要在char类型的输入之前加上getchar()函数用来吸收上一次输入的'\n'
#include<stdio.h>
#define MaxVnum 100 //最大的顶点数设为100
typedef char VertexType; //顶点类型
typedef int EdgeType; //边的权值
typedef struct ArcCell{
VertexType adj; //顶点的名称
int weight;
//InfoType *Info; //存弧的相关信息
}ArcCell,AdjMatrix[MaxVnum][MaxVnum];
typedef struct{
VertexType ves[MaxVnum]; //顶点表
AdjMatrix arcs; //边表
int vexnum,arcnum; //顶点数,边数
}Mgraph;
int LocateVex(Mgraph ga,VertexType v){
for(int i = 0;i<ga.vexnum;i++){
if(v == ga.ves[i]) return i;
}
return 0;
}
void CreateGraph(Mgraph &ga){
int i,j,k;
float w;
printf("请输入顶点的数目和边的数目。\n");
scanf("%d%d",&ga.vexnum,&ga.arcnum);
getchar();
printf("请输入顶点。\n");
for(i = 0;i<ga.vexnum ;i++){
ga.ves[i] = getchar();
}
for(i = 0;i<ga.vexnum ;i++){
for(j = 0;j<ga.vexnum;j++){
ga.arcs[i][j].weight=0;
}
}
getchar();
VertexType v1,v2;
for(k=0;k<ga.arcnum;k++){
printf("请按提示输入两个顶点以及它们之间边的权重。\n");
printf("请输入第一个顶点。\n");
scanf("%c",&v1);
getchar();
printf("请输入第二个顶点。\n");
scanf("%c",&v2);
printf("请输入这两个顶点之间边的权重。\n");
scanf("%f",&w);
getchar();
i = LocateVex(ga,v1);
j = LocateVex(ga,v2);
ga.arcs[i][j].weight = w;
ga.arcs[j][i].weight = w;
}
printf("邻接矩阵创建完成。\n");
}
void Show(Mgraph ga){
for(int i=0 ;i<ga.vexnum;i++){
for(int j = 0;j<ga.vexnum;j++){
printf("%d ",ga.arcs[i][j].weight);
}
printf("\n");
}
}
int main(){
Mgraph ga;
CreateGraph(ga);
Show(ga);
}
以上为书写的一个使用链接矩阵来初始化一个图的实验,在程序的第41,47,52行使用到了getchar()函数。
回车这个问题是经常会出现的小问题,而且想不到还总是调不好的小bug,继续加油啦~