Возможно, вам будет лучше сначала с помощью переменной «пройдено» как части Cars, а на самом деле, возможно, переименовать Cars в Car, поскольку она представляет только одну машину.Это может помочь вам лучше представить проблему.
struct Car{
int priority;
int passed; // lets set this to 1 if passed
};
И структура пересечения
struct Intersection
{
struct Car cars[4]; // let's give an intersection 4 cars
}
Установите структуру пересечения с некоторыми автомобилями, инициализируя их «переданную» переменную равной 0, что означает «не прошел'.
struct Intersection intersection;
// set the car priority
intersection.cars[0].priority = 2;
intersection.cars[1].priority = 1;
intersection.cars[2].priority = 3;
intersection.cars[3].priority = 0;
intersection.cars[0].passed = 0;
intersection.cars[1].passed = 0;
intersection.cars[2].passed = 0; /** Could do a loop here to initialize instead! */
intersection.cars[3].passed = 0;
Вы можете использовать цикл, цикл до тех пор, пока все автомобили не пройдут
Пример программы (не очень эффективный), так как я принимаю во внимание вероятность того, что вы новичок в C ивероятно, еще не выучили подобные списки или указатели и т. д.
#include <stdio.h>
int main()
{
struct Car{
int priority;
int passed;
};
// four cars per intersection
struct Intersection{
struct Car cars[4];
};
struct Intersection intersection;
// set the car priority
intersection.cars[0].priority = 2;
intersection.cars[1].priority = 1;
intersection.cars[2].priority = 3;
intersection.cars[3].priority = 0;
intersection.cars[0].passed = 0;
intersection.cars[1].passed = 0;
intersection.cars[2].passed = 0;
intersection.cars[3].passed = 0;
// keep looping until all cars passed
while (!intersection.cars[0].passed ||
!intersection.cars[1].passed || /* <--- this could be improved !! */
!intersection.cars[2].passed ||
intersection.cars[3].passed)
{
int best_priority = -1;
int best_car_index = -1;
// look for next car that can pass
for (int i = 0; i < 4; i++)
{
// this car hasn't passed yet -- check priority
if (!intersection.cars[i].passed)
{
// if not found a car yet to pass or this car is better, then choose this one so far...
if ((best_priority == -1) || (intersection.cars[i].priority < best_priority))
{
best_car_index = i;
best_priority = intersection.cars[i].priority;
}
}
}
if (best_car_index == -1)
break; // nothing found
else
{
// set the car with best priority to 'passed'
intersection.cars[best_car_index].passed = 1;
printf("Car ID %d with priority %d just passed the intersection!\r\n", best_car_index, best_priority);
}
}
return 0;
}
Вывод программы
Car ID 3 with priority 0 just passed the intersection!
Car ID 1 with priority 1 just passed the intersection!
Car ID 0 with priority 2 just passed the intersection!
Car ID 2 with priority 3 just passed the intersection!
Программа, вероятно, не делает то, что вы хотите, но, надеюсь, вы будетев состоянии манипулировать им так, как вы хотите.
(Вы можете заполнить новый список вместо печати данных)