我已经弄完读文件,动态分配,并将text中文件存入数组中,现在就差最后一个问题不会
问题!3.求以上程序中距离最近的两个城市,输出最近的两个城市名,以及它们之间的距离。
text文件:
8
阿比让 519 401
阿布扎比 2427 5423
阿布贾 912 711
阿卡普尔科 1651 -9956
阿克拉 533 15
艾达克岛 5152 17639
亚当斯敦 -2504 -13005
亚的斯亚贝巴 903 3842
已写写代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
typedef struct chengshi{
char City[20];
double a;
double b;
}Che;
void init(char *r,Che *che,int i){
char *token;
char z[2]=" ";
token=strtok(r,z);
strcpy(che[i].City,token);
token=strtok(NULL,z);
che[i].a=strtod(token,NULL);
token=strtok(NULL,z);
che[i].b=strtod(token,NULL);
}
void display(Che *che,int n){
int J;
printf("城市名\t\t坐标X\t坐标Y\n");
for(J=0;J<n;J++){
printf("%s\t\t%0.2lf\t%0.2lf\n",che[J].City,che[J].a,che[J].b);
}
}
Che * myread(char *q,int *k){
FILE *fp;
fp =fopen(q,"r");
char res[225];//通过fp来访问文件在内存中的信息
fgets(res,225,fp);
*k =atoi(res);
Che *che=(Che *)malloc(sizeof(Che)*(*k));
for(int J=0;J<*k;J++){
fgets(res,225,fp);//获取文件中的字符串:结果 ,怎么读,读谁
init(res,che,J);
}fclose(fp);
return che;
}
void Citydistane(Che *che ,int k){
double x1,x2 ,y1,y2,Y;
char s1[10];
char s2[10];
printf("请输入你要计算距离的城市名:\n");
scanf("%s%s",&s1,&s2);
for(int i=0;i<k;i++){
if(strcmp(s1,che[i].City)==0){
x1 = che[i].a;
y1 = che[i].b;
}
if(strcmp(s2,che[i].City)==0){
x2 = che[i].a;
y2 = che[i].b;
}
}
Y= sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
printf("%0.2lf",Y);
}
void longest(){
}
int main(){
int k;
char way[]="test.txt";
Che *che=myread(way,&k);
display(che,k);
Citydistane(che,k);
return 0;
}
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《读取城市坐标,计算任意两个城市之间的距离。》, 一起来围观吧 https://blog.csdn.net/m0_46672781/article/details/121336489?utm_source=app&app_version=4.18.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
你参考这篇文章的求最短距离的函数