从现在起计算分钟数直到某事到期

时间:2012-02-03 14:07:07

标签: c++ codeblocks

我有一个项目需要我接受输入(在同一天,我假设)一个作业到期。我试图从一个类似的问题中遵循一些代码,但它给了我一个错误,我假设它与time_t和int值有关。这是我的代码:

#include <iostream>
#include <ctime>
using namespace std;

int main() {
 int hour_input,min_input;

 cout << "What hour is your assignment due?\n";
 cin >> hour_input;
 cout << "What minute is your assignmnet due?\n";
 cin >> min_input;

 struct tm* tm;
 time_t ts = time(NULL);
 long int delta;
 tm->tm_hour = hour_input;
 tm->tm_min = min_input;

 delta = mktime(tm) - ts;
 delta += 24*60*60;
 cout << "There are "<< delta << " minutes until your assignment is due!\n";

 return 0;
}

我正在寻找的是如何正确使用<ctime>标题中的功能的一些指导,感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

double deltaMinutes = difftime(later,earlier) / 60.0;

我将每次struct初始化为当前日期。注意,1970年在成员tm :: tm_year中由70指定。

http://www.cplusplus.com/reference/clibrary/ctime/difftime/

答案 1 :(得分:1)

第一个错误是你创建一个指向struct tm但没有指向任何东西的指针。你不需要指针:

struct tm tm;
/* set fields */
time_t timestamp = mktime(&tm);

第二个错误是mktime期望结构中有完整的数据/时间。如果年,月和日都为零,则返回的时间将是第一年,月和日。该呼叫实际上可能失败,因为日期必须介于1和31之间。

这意味着使用struct tm来区分差异并不容易。而是按照Sam的建议使用difftime

答案 2 :(得分:0)

从代码中删除显着位(并且声明的顺序非常奇怪)

 struct tm* tm;
 tm->tm_hour = hour_input;
 tm->tm_min = min_input;
 delta = mktime(tm) - ts;

因此,tm未初始化并指向随机位置。此外,您没有正确填写结构,并且您有一个随机(可能无效)的年,月,日和秒。

mktime会尝试使其有效,但如果秒数足够大,则会对您的小时和分钟造成严重破坏。假设程序在达到目标之前没有崩溃。你没有说出你得到了什么错误。