C语言多读入前面一个回车是为何?
发布网友
发布时间:2022-05-10 18:49
我来回答
共4个回答
热心网友
时间:2023-10-22 18:59
你把第一个scanf()中的格式说明符改成%s试试看是不是你要的结果。
#include <stdio.h>
#include <iostream>
#define True 1
#define False 0
#define MAX 4
#define INFINITY 32768
int visited[MAX];
typedef int AdjType;
typedef char VertexData;
typedef struct ArcNode{
AdjType adj;
}ArcNode;
typedef struct{
VertexData vertex[MAX];
ArcNode arcs[MAX][MAX];
int vexnum,arcnum;
} AdjMatrix;
int LocateVertex(AdjMatrix *G,VertexData v)
{
int j=False,k;
for(k=0;k<G->vexnum;k++)
if(G->vertex[k]==v)
{
j=k;break;
}
return(j);
}
int CreateDN(AdjMatrix *G)
{
int i,j,k;
VertexData v1,v2;
printf("please input ArcNum&VexNum\n");
scanf("%d-%d",&G->arcnum,&G->vexnum);
printf("please input VexValue\n");
/*while(getchar()!='\n')
continue;*/这个循环你可以加上,主要是消除你输入数字以后按回车键的换行字符的。你这句加上就可以把%s改成%c。
for(i=0;i<G->vexnum;++i)
for(j=0;j<G->vexnum;++j)
G->arcs[i][j].adj=INFINITY;
for(i=0;i<G->vexnum;++i)
scanf("%s",&(G->vertex[i]));
for(i=0;i<G->vexnum;++i)
printf("%c",G->vertex[i]);
while(getchar()!='\n')
continue;
printf("please input arclink\n");
for(k=0;k<G->arcnum;++k)
{
scanf("%s,%s",&v1,&v2);
i=LocateVertex(G,v1);
j=LocateVertex(G,v2);
G->arcs[i][j].adj=1;
}
return True;
}
void TraverseGraph(AdjMatrix G)
{
int vi;
void DepthFirstSearch(AdjMatrix G,int v0);
for(vi=0;vi<G.vexnum;++vi)
visited[vi]=False;
for(vi=0;vi<G.vexnum;++vi)
if(!visited[vi])
DepthFirstSearch(G,vi);
}
void DepthFirstSearch(AdjMatrix G,int v0)
{
int vj;
void visit(AdjMatrix G,int v);
visit(G,v0);
visited[v0]=True;
for(vj=0;vj<G.vexnum;vj++)
if(!visited[vj]&&G.arcs[v0][vj].adj==1)
DepthFirstSearch(G,vj);
}
void visit(AdjMatrix G,int v)
{
printf("%c->",G.vertex[v]);
}
int main()
{
AdjMatrix G;
CreateDN(&G);
TraverseGraph(G);
system("pause");
return 0;
}
热心网友
时间:2023-10-22 19:00
这是C语言的输入格式:scanf("%d-%d",&G->arcnum,&G->vexnum);
在运行输入中“-”占了一个字节(本来是b),其后字母顺延。。。
热心网友
时间:2023-10-22 19:00
在最后面加这个试试
getchar();
getchar();
热心网友
时间:2023-10-22 19:01
加上getchar();试试