Musisz zastanowić się, co masz na myśli przez "czas". Istnieją dwa pojęcia, punkty czasowe i czasy trwania. Nie ma sensu dodawać ani odejmować od siebie punktów czasowych. Sensowne jest dodawanie i odejmowanie czasu trwania (co daje czas trwania), a sensowne jest dodawanie i odejmowanie czasu z punktem czasowym (co daje punkt czasowy:
Wiele interfejsów API nie działa dobrze praca rozróżnienia pomiędzy dwoma pojęciami, ale standard C++ <chrono>
biblioteka robi dość dobrze.
Oto niektóre kod, który nadużywa C tm
typu w celu dostać parę trwania od użytkownika, dodaje je razem, a następnie nadużycia tm
ponownie aby uzyskać wynik.
#include <iostream> // cout, cin
#include <iomanip> // get_time, put_time
#include <chrono> // hours, minutes, duration_cast
int main() {
// input, get a couple durations to do arithmetic on
// technically std::tm represents a time point and get_time is supposed to
// parse a time point, but we treat the results as a duration
std::tm t;
std::cin >> std::get_time(&t, "%H:%M");
auto duration1 = std::chrono::hours(t.tm_hour) + std::chrono::minutes(t.tm_min);
std::cin >> std::get_time(&t, "%H:%M");
auto duration2 = std::chrono::hours(t.tm_hour) + std::chrono::minutes(t.tm_min);
// do the arithmetic
auto sum = duration1 + duration2;
// output
auto hours = std::chrono::duration_cast<std::chrono::hours>(sum);
auto minutes = std::chrono::duration_cast<std::chrono::minutes>(sum - hours);
t.tm_hour = hours.count();
t.tm_min = minutes.count();
std::cout << std::put_time(&t, "%H:%M") << '\n';
}
Wydaje się, że masz go. Powodzenia!. – littleadv
Jedynym problemem jest to, że muszę użyć poniższego pliku nagłówkowego i klasy czasowej – Emptypeace
nie "potrzebujesz" klasy czasu dla tego .. byłoby stratą czasu .. (gra słów nie przeznaczonych) .. co ty wymaganie jest dość proste i można je łatwo uzyskać za pomocą normalnych operacji arytmetycznych. – iKlsR