разница двух введенных пользователем времени переполнения стека

Мне нужно уметь заполнить две переменные (своего рода переменная времени), а затем рассчитать их разницу.
после всех моих поисков я нашел difftime, но моя проблема в том, что он использует time_t переменные, и я не знаю, как заполнить time_t временем, которое я хочу.
например, я хочу, чтобы пользователь ввел time_1 и time_2 как (10:04, 11:05), и он сможет показывать разницу в секундах, минутах, часах и т. д. (например, 61 мин)

Я пытался как удар, но это не сработало:

#include <iostream>
#include <ctime>
using namespace std;
void main()
{
tm time_1 = {0, 0, 0, 1, 0, 0, 0, 0, 0};
tm time_2 = {0, 0, 0, 1, 0, 0, 0, 0, 0};

time_1.tm_hour = 10;
time_1.tm_min = 4;

time_2.tm_hour = 11;
time_2.tm_min = 5;

double diff = difftime (mktime(&time_2),mktime(&time_1));

cout << diff << endl;

system("pause");
}

1

Решение

std::tm имеет следующих членов (http://en.cppreference.com/w/cpp/chrono/c/tm):

int tm_sec;  // seconds after the minute – [0, 61](until C++11) / [0, 60] (since C++11)
int tm_min;  // minutes after the hour – [0, 59]
int tm_hour; // hours since midnight – [0, 23]
int tm_mday; // day of the month – [1, 31]
int tm_mon;  // months since January – [0, 11]
int tm_year; // years since 1900
int tm_wday; // days since Sunday – [0, 6]
int tm_yday; // days since January 1 – [0, 365]
int tm_isds; // Daylight Saving Time flag.

Вы инициализировали только пару из этих участников. Остальные неинициализированы для обоих объектов.

Следовательно, ваша программа имеет неопределенное поведение.

Чтобы увидеть предсказуемое поведение, правильно инициализируйте объекты. Одним из способов является использование:

 tm time_1 = {0, 0, 0, 1, 0, 0, 0, 0, 0};
tm time_2 = {0, 0, 0, 1, 0, 0, 0, 0, 0};

перед чтением пользовательского ввода.

Обновить

С помощью

std::time_t t = std::time(NULL);
std::tm time_1 = *std::localtime(&t);
tm time_2 = time_1;

Инициализировать time_1 а также time_2 Кажется, работает на меня.

Посмотрите, как это работает в http://ideone.com/AmCzTu.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]