Хорошо, давайте развернем цикл и сделаем каждый шаг отдельно.
Первая итерация:
// 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
- немного после полуночи.