#include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> #define maxint 32767 #define mvnum 100 typedef char vertextype; typedef int arctype; typedef struct { vertextype vexs[mvnum]; arctype arcs[mvnum][mvnum]; int vexnum,arcnum; }amgraph; int i=0,j=0; int vexlocate(amgraph &G,vertextype u) { for(i=0;i<G.vexnum;i++) { if(u==G.vexs[i]) return i; } return 0; } void createudn(amgraph &G) { int w; char v1,v2; printf("请输入总定点数和总边数:\n"); scanf("%d %d",&G.vexnum,&G.arcnum); printf("请输入各点信息:\n"); for(i=0;i<G.vexnum;++i) { scanf("%c",&G.vexs[i]); } for(i=0;i<G.vexnum;++i) { for(j=0;j<G.vexnum;++j) { G.arcs[i][j]=maxint; } } for(i=0;i<G.arcnum;i++) { scanf("%c %c %d",&v1,&v2,&w); G.arcs[vexlocate(G,v1)][vexlocate(G,v2)]=w; G.arcs[vexlocate(G,v2)][vexlocate(G,v1)]=w; } } void amgraphprint(amgraph &G) { printf("邻接矩阵展示:\n"); for(i=0;i<G.vexnum;++i) { printf("%d:",i+1); for(j=0;j<G.vexnum;++j) { if(G.arcs[i][j]!=maxint) printf("%d ",G.arcs[i][j]); else printf("0 "); } printf("\n"); } } int main() { amgraph G; createudn(G); amgraphprint(G); return 0; }帮我检查循环的问题
时间: 2024-01-31 17:03:39 浏览: 71
在 createudn 函数中,在读取各点信息时,由于缓冲区中可能还有回车符,导致读取的第一个字符为回车符,而不是实际输入的字符。这会导致后面的读取操作出现错误。
解决方法是在读取各点信息前,先读取掉缓冲区中的回车符。可以在 scanf 语句前加一个 getchar 语句,将缓冲区中的回车符读取掉。
修改后的代码如下:
```c++
void createudn(amgraph &G) {
int w;
char v1,v2;
printf("请输入总定点数和总边数:\n");
scanf("%d %d",&G.vexnum,&G.arcnum);
getchar(); // 读取掉缓冲区中的回车符
printf("请输入各点信息:\n");
for(i=0;i<G.vexnum;++i) {
scanf("%c",&G.vexs[i]);
}
for(i=0;i<G.vexnum;++i) {
for(j=0;j<G.vexnum;++j) {
G.arcs[i][j]=maxint;
}
}
for(i=0;i<G.arcnum;i++) {
scanf("%c %c %d",&v1,&v2,&w);
G.arcs[vexlocate(G,v1)][vexlocate(G,v2)]=w;
G.arcs[vexlocate(G,v2)][vexlocate(G,v1)]=w;
}
}
```
阅读全文