gpt4 book ai didi

使用结构从另一个函数调用变量

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:57 24 4
gpt4 key购买 nike

我是 C 的新手,我刚刚了解了 struct。我要制作一个从文件中读取数据并打印出来的程序。

我的一个子任务是计算两点之间的距离。我使用的是距离函数所见的半正弦公式。

但我的问题是,我正在尝试从 stage_1_read 函数获取 fst->Latfst->Long,但它不是working.I have highlighted the lines they are in,为了清楚。

我如何获得这些值?它们是文件中读取的第二个和第三个值,但使用我当前的代码,它看起来像是在读取第一个和第二个值。我已经尝试了一段时间,但就是无法获得我需要的值。

struct file_data{
char User[5];
char Long[12];
char Lat[12];
char Date[11];
char Time[3];
};

double stage_1_read(void);
double distance(struct file_data fst);
double toRadian(double x);

int main(){
printf("%f", stage_1_read());
return 0;
}

double stage_1_read(void){
/* This function takes the data from the input file,reading and printing
the User ID, Location (longitude and latitude), Date, Time, and Distance*/
double d;
char line[256];
struct file_data fst;

if (fgets(line, 256, stdin) != NULL) {
sscanf(line, "%s %s %s %s %s", fst.User, fst.Long, fst.Lat,
fst.Date, fst.Time);
}
else{
printf("Failed to read file. Check file and try again.");
exit(EXIT_FAILURE);
}
d = distance(fst);
printf("Stage 1\n==========\n");
printf("User: #%s\n", fst.User);
printf("Location: <%s %s>\n", fst.Long, fst.Lat);
printf("Date: %s\n", fst.Date);
printf("Time: %s\n", fst.Time);
printf("Distance to reference: %.2f", d);
return 0;
}

double distance(struct file_data fst) {
/* This function is designed to calculate the distance between the check-in
POI and the reference point provided*/
double angle_distance, chord_length, dist;
double lat_2, long_2;

lat_2 = *fst.Lat;
long_2 = *fst.Long;

double var_lat = toRadian(lat_2 - LAT_1);
double var_long = toRadian(long_2 - LONG_1);

chord_length = pow(sin(var_lat/2),2) + cos(toRadian(LAT_1)) *
cos(toRadian(lat_2)) * pow(sin(var_long/2),2);

angle_distance = 2 * atan2(sqrt(chord_length), sqrt(1 - chord_length));

dist = 6371 * angle_distance;

return dist;
}

double toRadian(double x) {
x = PI/DEGREES;
return x;
}

更新:

根据要求更改了一些代码。

最佳答案

您正在尝试引用在不同函数中声明的变量(尽管我不确定在不分配内存的情况下声明指向结构 struct file_data *fst 的指针如何为您工作) ,但是您可以将其声明为不带 * 的局部变量,然后您可以将其引用为 fst.Lat。如果您坚持将其用作指针,则应为此分配内存,您可以使用 malloc 或任何其他适合您的内存分配方法。

但对于我们的业务,当您从 distance 函数中引用 fst 变量时,您引用的是刚刚声明的新变量 fst在那个函数中。

如果你想从两个函数(或任何函数)引用同一个变量,一个选择是使这个变量成为全局变量(在函数范围之外声明它),或者你可以让 distance 接受指向该结构的指针作为参数

double distance(double d, struct file_data *fst)

然后你就可以访问你在stage_1函数下创建的了

关于使用结构从另一个函数调用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58046796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com