Ваша distance
функция неверна.Поскольку у вас есть struct
, который содержит flight_time
и flight_layover
, вы хотите передать массив этих structs
в функцию, а не массив каждого из этих 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_start
и user_end
будут определять границы массива, которые будут использоваться для расчета расстояния.
Также обратите внимание, что вы можете обращаться к индексам за пределами массива flights
. Я особенно не понимаю, почему у вас есть i=end+1
, возможно, вы хотели i = end - 1
?
У вас также есть часть условия и декремента вашего цикла for в обратном порядке, вот как я думаю, это должно быть:
for (i = start; i <= end; i++)
РЕДАКТИРОВАТЬ: Очевидно, что прототип вашей функции должен быть обновлен,и ваши struct
должны быть объявлены до того, как они будут использованы где-либо (в том числе перед прототипами). Вот весь код с упомянутыми мною модификациями.
Также будьте осторожны с вашей getNum
функцией, так как она может вернуть -1 в случае ошибки, и вы будете вызывать неопределенное поведениеесли вы обращаетесь к элементам до вашего массива.Вам также следует проверить вводимые пользователем данные, чтобы убедиться, что начальное и конечное значения находятся в диапазоне от 1 до 5 и уменьшены, так что они являются действительными индексами массива в диапазоне от 0 до 4.
Кроме того, вы можете использовать *Оператор 1044 * для добавления к текущему значению переменной, т. Е.
total_mins=total_mins + flights[i].flight_time + flights[i].flight_layover;
можно изменить на:
total_mins += flights[i].flight_time + flights[i].flight_layover;
EDIT2: И еще одна вещь.По соглашению постоянные #define
s должны быть в верхнем регистре, то есть.
#define HOUR 60
в отличие от #define hour 60
.