Si las declaraciones y expresiones cuestionan consejos

Acabo de hacer esta pregunta a partir de la programación de KN King's C: A Modern Aprroach. No es tarea, solo estoy aprendiendo del libro ...

La siguiente tabla muestra los vuelos diarios de una ciudad a otra:
Hora de salid - Hora de llegad
8: 00am - 10:16 a
9: 43am - 11:52 a
11: 19am - 1:31 p
12: 47pm - 3:00 p
2: 00pm - 4:08 p
3: 45pm - 5:55 p
7: 00pm - 9:20 p
9: 45pm - 11:58 p

Escriba un programa que solicite al usuario que ingrese una hora (expresada en horas y minutos, usando el reloj de 24 horas). Luego, el programa muestra las horas de salida y llegada del vuelo cuya hora de salida es más cercana a la ingresada por el usuario:

Ingrese un tiempo de 24 horas: 13:15
La hora de salida más cercana es a las 12:47 p.m., llegando a las 3:00 p.

Insinuació: Convierta la entrada en un tiempo expresado en minutos desde la medianoche y compárelo con los horarios de salida, también expresados en minutos desde la medianoche. Por ejemplo, 13:15 es 13 x 60 + 15 = 795 minutos desde la medianoche, que está más cerca de las 12:47 pm (767 minutos desde la medianoche) que cualquiera de las otras horas de salida.

Hasta ahora solo hemos cubierto las expresiones de comparación básicas y la declaración if y switch, por lo que mi respuesta tiene que basarse en estos obviamente y nada demasiado elegante. Mi código que se me ocurrió está debajo, me pregunto si alguien estaría dispuesto a echarle un vistazo y ver si estoy en el camino correcto, parece funcionar, pero parece ser mucho código por una cosa tan pequeña. Tal vez fue solo para enseñarnos la lógica involucrada. No he pegado todo el código, el resto es lo mismo una y otra vez, ya que compara los valores. No tengo experiencia en programación, ¡así que sé gentil!

Gracias por tu tiempo, Andrew

#include <stdio.h>

int main (int argc, const char * argv[]) {


// Flight departure times since midnight
// 8am, 9:45am, 11:19am, 12:47pm
// 2pm, 3:45pm, 7pm, 7:45pm
int a = 480, b = 585, c = 679, d = 767,
    e = 840, f = 945, g = 1140, h = 1185;

// Flight arrival times for respective departure times.
int a1 = 616, b1 = 712, c1 = 811, d1 = 900,
    e1 = 968, f1 = 1075, g1 = 1280, h1 = 1438;

int hours, minutes, time, t, u;

// Get the users time

printf("Enter a 24 hour time (hh:mm): \n");
scanf("%d:%d", &hours, &minutes);

time = hours * 60 + minutes;

printf("Closest departure time is ");

if (time <= a)
    printf("8:00am");
else
    if (time > a && time <= b) {
                t = time - a; 
                u = b - time;
                if (t < u) {
                    printf("%.2d:%.2d", a / 60, a % 60);
                        if (a / 60 == 0)
                            printf("am");
                        else if (a / 60 < 12)
                            printf("am");
                        else if (a / 60 == 12)
                            printf("pm");
                        else
                            printf("pm");
                    printf(", arriving at %d:%.2d", a1 / 60, a1 % 60);
                        if (a1 / 60 == 0)
                            printf("am");
                        else if (a1 / 60 < 12)
                            printf("am");
                        else if (a1 / 60 == 12)
                            printf("pm");
                        else
                            printf("pm");
                }
                else {
                        printf("%.2d:%.2d", b / 60, b % 60);
                        if (b / 60 == 0)
                            printf("am");
                        else if (b / 60 < 12)
                            printf("am");
                        else if (b / 60 == 12)
                            printf("pm");
                        else
                            printf("pm");
                    printf(", arriving at %d:%.2d", b1 / 60, b1 % 60);
                        if (b1 / 60 == 0)
                            printf("am");
                        else if (b1 / 60 < 12)
                            printf("am");
                        else if (b1 / 60 == 12)
                            printf("pm");
                        else
                            printf("pm");
                }
    }

Cambios según el consejo que me han dado: (Gracias xamypah y Gabe) ...

int hours, minutes, time, t, u, x, y;

// Get the users time

printf("Enter a 24 hour time (hh:mm): \n");
scanf("%d:%d", &hours, &minutes);

time = hours * 60 + minutes;

printf("Closest departure time is ");

if (time <= a)
    printf("8:00am");
else
    if (time > a && time <= b) {
                t = time - a; 
                u = b - time;

                if (t <= u) {
                    x = a;
                    y = a1;
                }
                else {
                    x = b;
                    y = b1;
                }

Luego al final del programa después de varios de los anteriores:

printf("%.2d:%.2d", x / 60, x % 60);

if (x / 60 < 12)
    printf("am");
else 
    printf("pm");
    printf(", arriving at %d:%.2d", y / 60, y % 60);

if (y / 60 < 12)
    printf("am");
else
    printf("pm");

En realidad, tuve que hacer algunos cambios en esa declaración de impresión final, o de lo contrario estaba mostrando las horas en formato de 24 horas con am y pm después de:

if (x / 60 < 12)
    printf("%d:%.2d am", x / 60, x % 60);
else 
    printf("%d:%.2d pm", (x / 60) - 12, x % 60);

printf(", arriving at ");

if (y / 60 < 12)
    printf("%d:%.2d am", y / 60, y % 60);
else
    printf("%d:%.2d pm", (y / 60) - 12, y % 60);

Respuestas a la pregunta(8)

Su respuesta a la pregunta