@aussie_aj; 1.Внутренняя программа 1:00 утра в вашей программе, и вы получите время вылета 8:00 утра вместо 9:45 вечера !! 2.Ввод 12:10. в твоей программе см. МАГИЯ !! :)

ько что сделал этот вопрос из программирования К.Н. Кинга на языке C: современный подход. Это не домашняя работа, я просто учусь из книги ...

Следующая таблица показывает ежедневные рейсы из одного города в другой:
Время отправления - Время прибытия
8:00 - 10:16
9:43 - 11:52
11:19 - 13:31
12:47 - 15:00
14:00 - 16:08
3:45 вечера - 5:55 вечера
19:00 - 21:20
9:45 вечера - 23:58 вечера

Напишите программу, которая просит пользователя ввести время (в часах и минутах с использованием 24-часовых часов). Затем программа отображает время вылета и прилета рейса, время вылета которого ближе всего к введенному пользователем:

Введите 24 часа: 13:15
Ближайшее время отправления - 12:47, прибытие в 15:00.

намек: Преобразование входных данных во время, выраженное в минутах с полуночи, и сравнение его с временем отправления, также выраженным в минутах с полуночи. Например, 13:15 - это 13 x 60 + 15 = 795 минут с полуночи, что ближе к 12:47 вечера (767 минут с полуночи), чем к любому другому времени вылета.

До сих пор мы рассмотрели только базовые выражения сравнения и оператор if и switch, поэтому мой ответ должен основываться на них, очевидно, и не слишком причудливо. Мой код, который я придумал, приведен ниже, мне интересно, если бы кто-то захотел взглянуть на него и посмотреть, нахожусь ли я на правильном пути, кажется, он работает, но кажется, много кода за такую ​​маленькую вещь. Возможно, это было просто, чтобы научить нас логике. Я не вставил весь код, остальное - это одно и то же снова и снова, когда сравниваются значения. У меня нет опыта программирования, поэтому, пожалуйста, будьте осторожны!

Спасибо за ваше время, Эндрю

#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");
                }
    }

Изменения согласно совету, который мне дали: (Спасибо xamypah и Гейб) ...

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;
                }

Затем в конце программы после нескольких из вышеперечисленных:

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");

На самом деле мне пришлось внести некоторые изменения в этот конечный оператор печати, иначе он отображал время в 24-часовом формате с am и pm после:

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);

Ответы на вопрос(1)

Ваш ответ на вопрос