C程序可以工作(并给出正确的输出),但无论如何都会崩溃
该程序计算输入的城市之间的距离 笛卡尔坐标系,并输出最近的2个城市 程序编译时没有问题,因此它一定是一个逻辑错误,但一旦最后两个城市之间的距离过大(大于其他城市之间的距离),程序就会崩溃 当我在接近结尾的if语句中编写printf时,它只显示if被访问过一次,这是不可能的,因为如果输入3个城市,i和j应该是不同的6/9组合C程序可以工作(并给出正确的输出),但无论如何都会崩溃,c,struct,compare,C,Struct,Compare,该程序计算输入的城市之间的距离 笛卡尔坐标系,并输出最近的2个城市 程序编译时没有问题,因此它一定是一个逻辑错误,但一旦最后两个城市之间的距离过大(大于其他城市之间的距离),程序就会崩溃 当我在接近结尾的if语句中编写printf时,它只显示if被访问过一次,这是不可能的,因为如果输入3个城市,i和j应该是不同的6/9组合 #include <stdio.h> #include <stdlib.h> #include <math.h> typedef stru
#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);
}
#包括
#包括
#包括
类型定义结构{
字符名[16];
int x;
int-y;
}城市;
双倍距离(城市a、城市b)
{
双d;
d=sqrt((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y));
返回d;
}
int main()
{
int n,i,j;
城市*g;
printf(“输入城市数:”);
scanf(“%d”和“&n”);
g=(城市*)malloc(城市规模);
对于(i=0;i实际崩溃可能是因为您在使用它们之前忘记初始化maxi
和maxj
。因为循环中的条件不一定会遇到,所以在初始化maxdistance
时,您应该将它们设置为0和1。您的城市名称的大小是多少?如果>15,则您有问题。T用scanf(“%15s”,g[i].name);
为(j=0;j为(j=i+1;j@Jean-Françoisfare感谢您的建议,不幸的是,我已经尝试将for循环更改为精确的格式,如果城市之间的距离差异很大,它仍然会崩溃(~6)并且只适用于最后2个输入的城市。请定义“崩溃”!你是“核心转储”、“分段错误”还是什么?如果你的“崩溃”,用户Falderol建议用return(0)
语句结束main
,这可能很重要只是你的操作系统报告了main的非零返回值!就是这样!非常感谢!当distance(g[0],g[1]时会发生这种情况)
确实是最大距离。是否应该将maxdistance初始化为max_DOUBLE,或者在C中调用任何最大的DOUBLE?@PaulOgilvie Oooooh!这很有意义!谢谢!不客气。@Adder是的,另一个解决方案可能是将maxdistance
初始化为DBL_max。