主题:在做题目时发现一个有关C语言输入的问题。
做题时不小心在scanf()括号内多打了个空格 如下 scanf("%d %d %d ",&a,&b,&len);,正确的应该scanf("%d %d %d",&a,&b,&len); 由此便输入不争确了,要多输入一个数才会输出 。在我现有的经验里这应该是没有错得呀,,不知道为什么会这样。请问有人知道这个原因不??
如不清楚我具体指的是什么,下面有我整个代码 ,最后一行为要出入的数据。备注处应该为出错的地方。
#include<stdio.h>
#include<limits.h>
#define MAXN 501
int arcnum,vexnum;
int map[MAXN][MAXN];
void input()
{
int i,j,len,a,b;
scanf("%d %d",&vexnum,&arcnum);
for(i=0;i<vexnum;i++)
for(j=0;j<vexnum;j++)
map[i][j]=INT_MAX;
for(i=1;i<=arcnum;i++)
{
scanf("%d %d %d ",&a,&b,&len); //该处有空格和无空格会有不同的效果
if(len<map[a][b])
map[a][b]=map[b][a]=len;
}
}
void prim()
{
int i,j,now,small;
int state[MAXN]={0};
int dis[MAXN];
int sum=0;
for(i=0;i<vexnum;i++)
dis[i]=INT_MAX;
now=0; state[now]=1; dis[now]=0;
for(j=1;j<vexnum;j++)
{
for(i=0;i<vexnum;i++)
if(!state[i]&&dis[i]>map[now][i])
dis[i]=map[now][i];
small=INT_MAX;
for(i=0;i<vexnum;i++)
if(!state[i]&&small>dis[i])
small=dis[now=i];
state[now]=1;
sum+=small;
}
printf("%d\n",sum);
}
int main()
{
int cases;
scanf("%d",&cases);
while(cases--)
{
input();
prim();
}
return 0;
}
// 1 3 3 0 1 20 0 2 0 1 2 3
如不清楚我具体指的是什么,下面有我整个代码 ,最后一行为要出入的数据。备注处应该为出错的地方。
#include<stdio.h>
#include<limits.h>
#define MAXN 501
int arcnum,vexnum;
int map[MAXN][MAXN];
void input()
{
int i,j,len,a,b;
scanf("%d %d",&vexnum,&arcnum);
for(i=0;i<vexnum;i++)
for(j=0;j<vexnum;j++)
map[i][j]=INT_MAX;
for(i=1;i<=arcnum;i++)
{
scanf("%d %d %d ",&a,&b,&len); //该处有空格和无空格会有不同的效果
if(len<map[a][b])
map[a][b]=map[b][a]=len;
}
}
void prim()
{
int i,j,now,small;
int state[MAXN]={0};
int dis[MAXN];
int sum=0;
for(i=0;i<vexnum;i++)
dis[i]=INT_MAX;
now=0; state[now]=1; dis[now]=0;
for(j=1;j<vexnum;j++)
{
for(i=0;i<vexnum;i++)
if(!state[i]&&dis[i]>map[now][i])
dis[i]=map[now][i];
small=INT_MAX;
for(i=0;i<vexnum;i++)
if(!state[i]&&small>dis[i])
small=dis[now=i];
state[now]=1;
sum+=small;
}
printf("%d\n",sum);
}
int main()
{
int cases;
scanf("%d",&cases);
while(cases--)
{
input();
prim();
}
return 0;
}
// 1 3 3 0 1 20 0 2 0 1 2 3