关于#c语言#的问题:程序运行到输入起点回车就结束了,qiu怎样解决#include <stdio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define INFINITY 10000
#define M 20
typedef struct{
char V[M][10];//顶点数组,用来存储辖区的值即辖区的名称
int R[M][M];
int vexnum;
}Graph;
int locatevex(Graph*g,char a[100])
{
int i;
for(i=0;i<g->vexnum;i++)
{
if(strcmp(a,g->V[i])==0)
return i;
}
if(i==g->vexnum)
return -1;
}
int creategraph(Graph *g)
{
int i=0,j,k,p,m;
char a[10],b[10];
printf("******欢迎使用地铁站建设程序******\n");
printf("******请按照提示依次输入信息******\n");
printf("******请输入所有的辖区,以0作为结束标志******\n");
scanf("%s",g->V[i]);
while(strcmp("0",g->V[i])!=0)
{
i++;
scanf("%s",g->V[i]);
}
g->vexnum=i;
for(i=0;i<g->vexnum;i++)
for(j=0;j<g->vexnum;j++)
g->R[i][j]=INFINITY;
printf("******请输入各辖区之间的路程,以00作为结束标志\n");
scanf("%s%s%d",a,b,&m);
while(strcmp("0",a)!=0 || strcmp("0",b)!=0 || m!=0)
{
k=locatevex(g,a);
p=locatevex(g,b);
if(k==-1)
{
printf("******对不起,输入错误,没有%s这个辖区******\n",a);
return 0;
}
if(p==-1)
{
printf("******对不起,输入错误,没有%s这个辖区******\n",b);
return 0;
}
g->R[k][p]=g->R[p][k]=m;
scanf("%s%s%d",a,b,&m);
}
return 1;
}
struct tree{
int weizhi;
int lowcost;
};
int minimun(struct tree*a,Graph g)
{
int i,k,m=0;
for(i=0;i<g.vexnum;i++)
{
if(m==0&&a[i].lowcost!=0)
{
m=1;
k=i;
}
if(m==1&&a[i].lowcost!=0)
{
if(a[i].lowcost<a[k].lowcost)
k=i;
}
}
return k;
}
void MiniSpanTree_PRIM(Graph g,char a[100])
{
struct tree closedge[M];
int i,j,k,money=0;
k=locatevex(&g,a);
for(i=0;i<g.vexnum;i++)
{
if(i!=k)
{
closedge[i].lowcost=g.R[k][j];
closedge[i].weizhi=k;
}
}
closedge[k].lowcost=0;
printf("******根据您的输入建立邻接表为:******");
for(i=0;i<g.vexnum;i++)
{
for(j=0;j<g.vexnum;j++)
{
printf("l%dl",g.R[i][j]);
}
printf("\n\n");
}
printf("******应建设地铁去辖区及之间权值为:******\n");
for(i=1;i<g.vexnum;i++)
{
k=minimun(closedge,g);
money=money+closedge[k].lowcost;
printf("%d:%s %s %d\n",i,g.V[closedge[k].weizhi],g.V[k],closedge[k].lowcost);
closedge[k].lowcost=0;
for(j=0;j<g.vexnum;j++)
{
if(g.R[k][j]<closedge[j].lowcost)
{
closedge[j].weizhi=k;
closedge[j].lowcost=g.R[k][j];
}
}
}
printf("******据统计地铁的总建设路程为;%d******\n",money);
}
int main()
{
int i;
Graph g;
char a[100];
i=creategraph(&g);
if(i)
{
printf("******请输入起始地点为:******\n");
scanf(" %s",a);
//getchar();
MiniSpanTree_PRIM(g,a);
}
printf("******感谢您的使用,谢谢!******\n\n");
}
int main()
{
int a = 0;
int b = 0;
int c = 0;
int ciao = 0;//ciao 是笔者随意取的一个中间变量
scanf(“%d %d %d”, &a, &b, &c);
if (a < b || a ==b)
{
ciao = a;
a = b;
b = ciao;
}
if (a < c || a == c)
{
ciao = a;
a = c;
c = ciao;
}
if (b < c || b == c)
{
ciao = b;
b = c;
c = ciao;
printf(“%d %d %d”, a, b, c);
}
else
{
printf(“%d %d %d”, a, b, c);
}
return 0;`
这个问题的出现是因为输入操作不被缓冲,需要使用getchar()来实现输入的缓冲。
具体解决方案如下:
#include <stdio.h>
int main()
{
printf("请输入您的姓名:");
getchar(); // 添加getchar()操作
return 0;
}
#include <stdio.h>
void clear_input_buffer() // 封装输入缓冲的函数
{
char ch;
while ((ch = getchar()) != '\n' && ch != EOF) {} // 不断读取输入缓冲
}
int main()
{
printf("请依次输入您的姓名、性别和年龄:");
clear_input_buffer(); // 调用输入缓冲函数
return 0;
}
以上两种方法都可以解决输入缓冲的问题。如果还有其他问题或者需要详细的代码示例,请在评论区留言。
这么写代码会累死审查的, 为了以后能省同事, 注意一下命名规则.
void MiniSpanTree_PRIM(Graph g, char a[100])
{
struct tree closedge[M];
int i;
int j = 0; // 问题, 不置零导致的问题
int k;
int money = 0;
k = locatevex(&g, a);
for (i = 0; i < g.vexnum; i++)
{
if (i != k)
{
closedge[i].lowcost = g.R[k][j]; // 问题
closedge[i].weizhi = k;
}
}
closedge[k].lowcost = 0;
printf("******根据您的输入建立邻接表为:******");
for (i = 0; i < g.vexnum; i++)
{
for (j = 0; j < g.vexnum; j++)
{
printf("l%dl", g.R[i][j]);
}
printf("\n\n");
}
printf("******应建设地铁去辖区及之间权值为:******\n");
for (i = 1; i < g.vexnum; i++)
{
k = minimun(closedge, g);
money = money + closedge[k].lowcost;
printf("%d:%s %s %d\n", i, g.V[closedge[k].weizhi], g.V[k],
closedge[k].lowcost);
closedge[k].lowcost = 0;
for (j = 0; j < g.vexnum; j++)
{
if (g.R[k][j] < closedge[j].lowcost)
{
closedge[j].weizhi = k;
closedge[j].lowcost = g.R[k][j];
}
}
}
printf("******据统计地铁的总建设路程为;%d******\n", money);
}