該程序計算輸入城市之間的距離 笛卡兒座標系統並輸出最近的兩個城市。C程序工作正常(但輸出正確),但仍然崩潰
該程序編譯沒有問題,所以它必須是一個邏輯錯誤,但一旦最後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);
}
你的城市名稱的大小是多少?如果> 15,那麼你有問題。嘗試使用'scanf(「%15s」,g [i] .name);'使輸入安全 –
btw:'for(j = 0; j'for(j = i + 1; j
@ Jean-FrançoisFabre感謝您的建議,不幸的是我已經嘗試將for循環更改爲確切的格式,如果城市之間的距離差異很大(〜6),它仍然崩潰,並且只適用於最後2個輸入的城市 –