конвертировать целое число в 24-часовой формат C ++ - PullRequest
0 голосов
/ 24 мая 2018

Я ищу помощь в C ++ для преобразования целочисленного ввода в 24-часовой формат.Предположим, вы строите запланированное время для самолетов от A (начало) до B (конец);Пользователь может ввести 4 различные переменные, такие как время полета самолета от А до В;время первого самолета;время последнего полета;и частота поездок за один день.

Ввод будет выглядеть следующим образом:

int journey_time; 
int start_time; 
int end_time; 
int frequency;

cout << "Please enter your journey time:\n"; 
cin >> journey_time; 

cout << "Please enter your start time:\n"; 
cin >> start_time; 

cout << "Please enter your end time: \n"; 
cin >> end_time; 

cout << "Please enter the frequency: \n";
cin >> frequency;

ВАЖНО упомянуть, что пользователь должен вводить целое число раз, а часы должны быть преобразованы в 24-часовое время Иэто где я застрял;Я смог преобразовать целое число в минуты, но не в часы

, пока у меня есть этот код

 for (int total_min_start= start_time; total_min_start <= end_time; total_min_start +=frequency)
    {
        hs = total_min_start/100; // to get the hours 
        ms = total_min_start %100;  // to get the minutes


        x = (hs *60) + ms; // converted into minutes

        h = ((x-ms)/60) * 100; <= this is where I am confused, I want here the reconversion of hours into to 24 hours format 


        t = h + ms;  // this is the total time after reconversion

        cout << t << "\t" << t + journey_time<< endl; 

}}} 

, если я введу время поездки = 15;start_time = 0930;end_time = 1000 и частота = 15 минут, я получаю следующий вывод (слева), но я хочу этот вывод (справа)

WRONG OUTPUT            RIGHT OUTPUT
930     945             930     945
945     960             945     1000
960     1000            1000    1015

Я был бы очень очень благодарен за любую помощь или подсказку ...Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Создание отдельных функций для преобразования минут в 24-часовой формат времени и наоборот.

auto get_24hr = [](int minutes){ return (minutes/60)*100 + (minutes%60);};
auto get_minutes = [](int time_24){return (time_24/100)*60+  (time_24 % 100);};

for (int total_min_start= start_time; total_min_start <= end_time; total_min_start +=frequency)
{
    auto x = get_minutes(total_min_start); // converted into minutes
    cout << get_24hr(x) << "\t" << get_24hr(x+journey_time) << endl;

}
0 голосов
/ 24 мая 2018

Хорошо, давайте развернем цикл и сделаем каждый шаг отдельно.

Первая итерация:

// Loop initialization
total_min_start = 930;

hs = 930 / 100;  // 9
ms = 930 % 100;  // 30

x = (9 * 60) + 30;  // 540 + 30 = 570

h = ((570 - 30) / 60) * 100;  // (540 / 60) * 100 = 9 * 100 = 900

t = 900 + 30;  // 930

// t + journey_time = 930 + 15 = 945

total_min_start += 15;  // 945

Пока все хорошо, поэтому мы начинаем вторую итерацию:

total_min_start = 945;

hs = 945 / 100;  // 9
ms = 945 % 100;  // 45

x = (9 * 60) + 45;  // 540 + 45 = 585

h = ((585 - 45) / 60) * 100;  // (540 / 60) * 100 = 9 * 100 = 900

t = 900 + 45;  // 945

// t + journey_time = 945 + 15 = 960

total_min_start += 15;  // 960

Ах, похоже, у нас проблема.Значение в t равно , а не время в минутах, фактически два отдельных значения : часы и минуты.

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

Второй способ решения проблемы, который, как мне кажется, гораздо проще, состоит в том, чтобысразу после ввода преобразуйте вход в одно значение, единица измерения которого - количество минут после полуночи.То есть, если пользователь вводит 930, что означает 9:30, вы конвертируете его в значение 570 (количество минут после полуночи).Затем работайте только с этим значением, увеличивайте и уменьшайте его по своему усмотрению и конвертируйте его обратно в предпочитаемый вами формат при представлении его пользователю.

Чтобы помочь вам с преобразованиями назад и вперед, я предлагаю вампара утилит или вспомогательных функций: одна для преобразования метки времени в минуты после полуночи, а другая для преобразования количества минут после полуночи в метку времени.Тогда вы могли бы легко сделать что-то вроде

cout << minutes_to_time(t) << '\t' << minutes_to_time(t + journey_time) << '\n';

О, и не забудьте проверить, что вы собрались в полночь.В обоих случаях t - ровно полночь, t + journey_time - полночь, t - немного до полуночи и t + journey_time - немного после полуночи.

...