gpt4 book ai didi

c - 如何将结构体数组传递给函数

转载 作者:行者123 更新时间:2023-11-30 14:27:12 24 4
gpt4 key购买 nike

我想将一个结构数组传递给一个函数,但我不断收到错误。我不确定一般如何做,因为我从未被教过。我已经做了一些谷歌搜索,但我找不到任何东西。你们能帮我解释一下为什么这不起作用吗?这是整个程序的代码(很小,只是一个测试程序):

 #include <stdio.h>
#include <stdlib.h>
#define hour 60


int getNum(void);
int distance(int start, int end , int flight_time[5], int flight_layover[5]);

int main(void)
{
int user_start=-1;
int user_end=-1;
int travel_time=0;

struct flight
{
int flight_time;
int flight_layover;
};

struct flight flights[5]=
{
{4 * hour + 15, 1 * hour + 20},
{3 * hour + 58, 0 * hour + 46},
{3 * hour + 55, 11 * hour + 29},
{2 * hour + 14, 0 * hour + 53},
{3 * hour + 27, 0 * hour + 0}
};

printf ("Hello sir. Please enter you starting city:\n");
user_start=getNum();
user_start--;

printf ("Good. Now enter the city you would like to end it:\n");
user_end=getNum();
user_end--;

travel_time = distance(user_start,user_end, flights[5].flight_layover, flights[5].flight_time);

printf ("The total travel time from %d to %d is %d.",user_start, user_end, travel_time);

return 0;
}



int distance(int start, int end , int flight_time[5], int flight_layover[5])
{
int total_mins=0;
int i=0;
for (i=end+1;i--;i=start)
{
total_mins=total_mins + flight_time[i] + flight_layover[i];
}

return total_mins;
}


int getNum(void)
{
char record[121] = {0};
int number = 0;
fgets(record, 121, stdin);
if(sscanf_s(record, "%d", &number) != 1 )
{
number = -1;
}
return number;
}

最佳答案

你的距离函数完全错误。由于您有一个包含 flight_timeflight_layoverstruct,因此您希望将这些 struct 的数组传递给函数,而不是每个 int 值的数组。即。

int distance(int start, int end, struct flight flights[])
{
int total_mins=0;
int i=0;
for (i=end+1;i--;i=start)
{
total_mins=total_mins + flights[i].flight_time + flights[i].flight_layover;
}

return total_mins;
}

更改了函数签名和 for 循环内的行。

然后在调用distance的地方,您可以将调用更改为:

distance(user_start,user_end, flights)

这将传递一个指向数组开头的指针 (flights),并且 user_startuser_end 将指定数组的边界用于计算距离的数组。

另请注意,您可能会访问 flights 数组范围之外的索引。我特别不明白为什么您有 i=end+1,也许您想要i = end - 1

您还反转了 for 循环的条件和递减部分,这就是我认为应该是的:

for (i = start; i <= end; i++)

编辑:显然你的函数原型(prototype)需要更新,并且你的struct应该在它们在任何地方使用之前声明(包括在原型(prototype)之前)。 Here's包含我提到的修改的整个代码。

此外,请小心使用 getNum 函数,因为它可能会在出错时返回 -1,并且如果您在数组之前访问元素,则会导致未定义的行为。您还应该检查用户输入,以确保起始值和结束值在 1 到 5 之间,并递减,以便它们是介于 0 到 4 之间的有效数组索引。

此外,您还可以使用+=运算符添加到变量的当前值,即

total_mins=total_mins + flights[i].flight_time + flights[i].flight_layover;

可以更改为:

total_mins += flights[i].flight_time + flights[i].flight_layover;

EDIT2:另一件事。按照惯例,常量#define应为大写,即。

#define HOUR 60#define hour 60 不同。

关于c - 如何将结构体数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8086210/

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