程序计算输入城市之间的距离 笛卡尔坐标系并输出最近的2个城市。
程序编译没有问题所以它必须是一个逻辑错误,但是一旦最后两个城市之间的距离太大(大于其他城市之间的距离)就会崩溃。
当我在if语句附近写了一个printf时,它只显示if已被访问过一次,因为如果输入3个城市i和j应该是不同的6/9组合。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct{
char name[16];
int x;
int y;
}city;
double distance(city a,city b)
{
double d;
d = sqrt((b.x-a.x)*(b.x-a.x) +(b.y-a.y)*(b.y-a.y));
return d;
}
int main()
{
int n,i,j;
city *g;
printf("Input number of cities: ");
scanf("%d",&n);
g = (city*)malloc(n*sizeof(city));
for(i=0;i<n;i++)
{
printf("Input name: ");
scanf("%s",g[i].name);
printf("Input x: ");
scanf("%d",&g[i].x);
printf("Input y: ");
scanf("%d",&g[i].y);
}
int maxi,maxj;
double maxdistance;
maxdistance=distance(g[0],g[1]);
for(i=0;i<n;i++){
//printf("i:%d\n",i);
for(j=0;j<n;j++)
{
//printf("j:%d\n",j);
{
if((distance(g[i],g[j]) < maxdistance) && (i!=j))
{
printf("debugcheck");
maxdistance = distance(g[i],g[j]);
maxi = i;
maxj = j;
}
}
}
}
printf("Least distance is %lf between %s and %s",distance(g[maxi],g[maxj]),g[maxi].name,g[maxj].name);
}
答案 0 :(得分:1)
实际崩溃可能来自您在使用之前忘记初始化maxi
和maxj
的事实。由于不一定遇到循环中的条件,因此在初始化maxdistance
时应将它们设置为0和1。