Я бы, вероятно, не использовал ни указатель, ни список ссылок, ни переключатель, чтобы написать это жестко.
Первое, что вам нужно знать, это то, что у вас есть и как их получить.
Тогда вам нужно знать, какие выводы вы можете отправить и как.
Предположим, что вы можете считать обороты как переменную C, и что другая переменная управляет передачей, это должно сработать:
while (1) {
if (rpm <= 3) chggear(-1);
if (rpm >= 7.4) chggear(+1);
}
, где функция chggear
переключит передачу и подождет некоторое время, чтобы убедиться, что следующая передача включена, прежде чем вернуться в цикл.
int chggear(int direction) {
gear += direction;
sleep(10); /* wait for gear to engage */
return gear; /* return currently engaged gear */
}
Редактировать Вы также можете перейти непосредственно на конкретную передачу независимо от того, что делает коробка передач:
int jumptogear(int geartojump) {
gear = geartojump;
}
и используйте его вот так
if (breaking) jumptogear(1); /* and possibly break gearbox */